Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2016, 10:39   #1
zhukov000
Новичок
Джуниор
 
Регистрация: 31.10.2016
Сообщений: 1
По умолчанию Парсинг url

Готовлю ребенка к сдаче ГИА-9 (ОГЭ) по информатике. База вопросов выложена на сайте фипи. Сделано у них все весьма коряво: через сам сайт fipi зайти проблематично (там постоянно какие-то перебои). Получается зайти по ip: по такому адресу:
http://85.142.162.126/os/xmodules/qp...74F2D6E7955F06
Задания тут представлены большим списком, без тем, без какой-либо группировки, не удобно очень.
Подумал написать небольшой скрипт для парсинга:
Во-первых, перед тем, как эту страницу открывать, нужно посетить:
http://85.142.162.126/os/xmodules/qprint/openlogin.php
На которой получить идентификатор сессии и с которой будет перенаправление.
Странички (как оказалось) в кодировке 1251, что для современного сайта, имхо, дичь.
Ну да ладно, это я поборол, но вот тут не могу разобраться и тут залип: после того, как делаю запрос к странице он возвращает мне ее без заданий. Хотя точно такой же запрос в браузере – дает результат. Дебаг по JS не помог, в ресурсах тоже ничего не нашел (думал может задания подгружаются в процессе). Возможно дело в MathJax? Может еще в чем.
Если кто-то сталкивался с чем-то подобным – помогите пожалуйста. Вот скрипт:

Код:
from bs4 import BeautifulSoup
import lxml.html as html
import requests

s = requests.Session()
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'}
url = "http://85.142.162.126/os/xmodules/qprint/openlogin.php" 
r = requests.get(url, headers=headers)
sid = r.cookies["PHPSESSID"]
qreq = "http://85.142.162.126/os/project/questions/question_view.php?qst=%s&md=qprint"

themes = [
    ('ИиКТ','74676951F093A0754D74F2D6E7955F06',
     [
        ('Информационные процессы','4BE9873EF46DB209473CFCC27C95FA75'),
        ('Информационные и коммуникационные технологии','0CB744F18A86A1C64D4EB577F422682B')
     ]
    )
]

def list_quest(sid, el):
    proj_guid = el[1]
    url = "http://85.142.162.126/os/xmodules/qprint/index.php?theme_guid=%s&proj_guid=%s&groupno=%d"
    for x in el[2]:
        theme_guid = x[1]
        print('Глава:', x[0])
        groupno = 0
        r = requests.get(url % (theme_guid, proj_guid, groupno),
                         cookies={'PHPSESSID': sid},
                         headers=headers)
        r.encoding = 'cp1251'
        # walk
        soup = BeautifulSoup(r.text, 'html.parser')
        nums = soup.find_all('span', { "class" : "Walk" })
        #
        if not len(nums):
            with open("c:\\temp\\1.html", "w", encoding='cp1251') as f:
                print(r.text, file=f)
        break
    return el

print(list_quest(sid, themes[0]))
Идея была сначала в получении количества страниц, потом парсинга каждой этой страницы и получении GUID заданий, ну и затем получении каждого задания. Но так как получить список номеров страниц не получилось, то результаты загрузки страницы сохраняются в файле. Можете помочь?
zhukov000 вне форума Ответить с цитированием
Старый 31.10.2016, 11:34   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от zhukov000 Посмотреть сообщение
Хотя точно такой же запрос в браузере – дает результат
Ну значит не точно такой же, берите снифер (Fiddler, Wireshark, F12—>Network, ...) и сравнивайте
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 31.10.2016, 12:41   #3
g00d
Новичок
Джуниор
 
Регистрация: 11.02.2016
Сообщений: 1
Радость

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Ну значит не точно такой же, берите снифер (Fiddler, Wireshark, F12—>Network, ...) и сравнивайте
И ведь действительно. Я до этого смотрел через F12-Network, а там пустота. А оказалось, что перед тем как сделать запрос к сприкту index.php делается еще запрос к скрипту qsearch.php (с которого я подозреваю автоматом происходит редирект на index и который, как я понимаю, устанавливает какие-то параметры для фильтра отображаемых заданий).

Спасибо Alex11223 и спасибо Fiddler!
g00d вне форума Ответить с цитированием
Старый 31.10.2016, 13:14   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

В F12-Network есть галочка, чтобы не очищались запросы при переходе на другую страницу/редиректе.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парсинг XML документа по URL LukeSkywalker Общие вопросы по Java, Java SE, Kotlin 0 10.12.2012 21:31
Парсинг XML документа по URL (Java, Android) LukeSkywalker Мобильные ОС (Android, iOS, Windows Phone) 1 10.12.2012 21:17
uniturlipv6.pas - парсинг url-а lexesv Работа с сетью в Delphi 1 08.02.2012 13:03