Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Data Mining
  • » Попытка сделать парсер для дневника https://mrko.mos.ru/dnevnik/ [RSS Feed]

#1 Дек. 29, 2015 22:20:54

dremdem
Зарегистрирован: 2015-12-29
Сообщения: 42
Репутация: +  0  -
Профиль   Отправить e-mail  

Попытка сделать парсер для дневника https://mrko.mos.ru/dnevnik/

Всем привет !

Есть мысль сделать парсер для дневника https://mrko.mos.ru/dnevnik/

Дано:
Есть малинка ( Raspberry PI 2 ), начальные знания по Python и.т.п.

Хочется сделать парсер дневника, который будет по расписанию ( скажем раз в час ) шарить по дневнику моих двух бойцов и вытаскивать оттуда домашние задания и оценки.
Для начала хочу, чтобы просто выводиласть web-страничка, которая в простом виде показывала домашку и оценки на следующий день по выбранному пользователю.

Впоследствии хочется запилить вывод всего этого богатства на экран малины и посылку смс-ок выбранным адресатам с домашками и оценками.

Уперся прямо с самого начала.
Использовал requests и lxml.

import lxml.html as html
import lxml.etree as etree
import requests
import json
s = requests.Session()
cookie = {ТУТКУЧАКУКИСОВКОТОРЫЕОТЛОВИЛСПРЕДЫДУЩИХСЕССИЙ}
url = 'https://mrko.mos.ru/dnevnik/services/dnevnik.php'
data={'login': 'ТУТЛОГИН', 'pass': 'ТУТПАРОЛЬ', 'password' : 'ТУТНЕВЕДОМЫЙПАРОЛЬ', 'submit': 'ХЗЧЕГО'}
headers={'Referer':'https://pgu.mos.ru/ru/application/dogm/journal'}
params = {'next': '2015-12-21'}
req=s.post(url, json=data, headers=headers, params=params, cookies=cookie )
parser = etree.HTMLParser()
tree = etree.fromstring(req.text.encode('utf-8'), parser=parser)
#f = open('/var/www/FlaskApp/FlaskApp/resp.html',u'w')
#f.write(r.text.encode('utf-8'))
#f.close()
d = tree.xpath("//div[@class='b-diary-st__body']")

Вначале нашел статью на хабре Your text to link here…
Используя приблуду указанную в статье, выяснил header и потом cookie.
Без cookie работать категорически отказалось.
Когда таки получил внятный ответ, радости не было предела!
Но счастье было недолгим. Ровно до завтра. Пробило полночь и карета превратилась в тыкву.
Старые куки не работали.
Подозреваю, что там есть завязка на день или какой-нить айди завязан на таймаут.
Вопрос в том, можно ли без куки пробиться к этому детищу государственного вебмастеринга ?

Офлайн

#2 Дек. 30, 2015 08:34:09

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Попытка сделать парсер для дневника https://mrko.mos.ru/dnevnik/

dremdem
ну у вас сразу несколько ошибок, связанных с тем что у вас как раз не хватает знаний по тематике в целом.
Во первых вы не правильно понимаете как работать с сессиями - они на то и придуманы что бы не думать о куках. Внимательней посмотрите примеры в офиц.документации.
Во вторых посмотрите на исходный код страницы на которой пытаетесь авторизироваться - вы посылаете через форму логин и MD5 сумму пароля (смотрите JS функцию reg),а не пароль в чистом виде.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Дек. 30, 2015 12:24:13

dremdem
Зарегистрирован: 2015-12-29
Сообщения: 42
Репутация: +  0  -
Профиль   Отправить e-mail  

Попытка сделать парсер для дневника https://mrko.mos.ru/dnevnik/

JOHN_16
dremdemну у вас сразу несколько ошибок, связанных с тем что у вас как раз не хватает знаний по тематике в целом.Во первых вы не правильно понимаете как работать с сессиями - они на то и придуманы что бы не думать о куках. Внимательней посмотрите примеры в офиц.документации.

Ок, а в чем конкретно ошибка в сессиях ?
Я в курсе, что сессии нужны если страница логина одна, а потом она редиректит на другую страницу. Чтобы не таскать куки с собой можно использовать сессию.
Но в данном случае, я сразу захожу на нужную мне страницу.
Без куков идет ответ 200 и выводит обычную страницу логин/пароля.

JOHN_16
Во вторых посмотрите на исходный код страницы на которой пытаетесь авторизироваться - вы посылаете через форму логин и MD5 сумму пароля (смотрите JS функцию reg),а не пароль в чистом виде.

data={'login': ‘ТУТЛОГИН’, ‘pass’: ‘ТУТПАРОЛЬ’, ‘password’ : ‘ТУТНЕВЕДОМЫЙПАРОЛЬ’, ‘submit’: ‘ХЗЧЕГО’}
Я посылаю все.
То есть :
login: имя пользователя
pass: пароль, который я руками ввожу
password: видимо это и есть MD5 сумма пароля, которую я вытащил через плагин мозиллы, “Просмотр HTTP-заголовков”

Форма выглядит так:

	<form method="post" action="services/index.php" id="em_enter" onsubmit="javascript:reg($('#pass').val());">
				Логин:<br>
		<input type="text" id="login" name="login" id="login" class="start_school"
		><br>
		
		Пароль:<br>
		<input type="password" id='pass' name="pass" class="start_school"><br><br>
                <input type="hidden" id='password' name="password" value=''>
		<input type="submit" name="submit" class="submit_em" value="Войти">
	</form>

Ну то есть получается, что reg шифрует пароль из pass в password и дальше все это хозяйство передается через POST на services/index.php

Вот как выглядит заголовок HTTP в плагине:

https://mrko.mos.ru/dnevnik/services/index.php

POST /dnevnik/services/index.php HTTP/1.1
Host: mrko.mos.ru
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: https://pgu.mos.ru/ru/application/dogm/journal
Cookie: XXXX
mos_id=CgMCH1VIzeGICQ3tA6RyAgA=; _ym_uid=1446467394631552336; _ym_isad=1; PHPSESSID=0krb3q9eqtue9bshu80g9q2eq2; _ym_visorc_11221408=b; _ym_visorc_25851473=b; _ym_visorc_14112952=b; _ym_visorc_26076186=w
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 114
login=XXXXX&pass=XXXXXXXXXpassword=XXXXXXXX&submit=%D0%92%D0%BE%D0%B9%D1%82%D0%B8
HTTP/1.1 302 Found
Server: nginx
Date: Wed, 30 Dec 2015 00:47:37 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.4.24
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Location: https://mrko.mos.ru/dnevnik/services/dnevnik.php?r=1&first=1
Content-Length: 0

Офлайн

#4 Янв. 4, 2016 22:03:56

dremdem
Зарегистрирован: 2015-12-29
Сообщения: 42
Репутация: +  0  -
Профиль   Отправить e-mail  

Попытка сделать парсер для дневника https://mrko.mos.ru/dnevnik/

Все, можно закрывать.
Кому интересно: пришлось заходить через pgu.mos.ru, там видимо получались все необходимые куки, сохранялись в сессии и дальше уже все прекрасно работает вход в дневник.
Для разбора запросов пользовался встроенным в Mozilla инспектором.

Офлайн

#5 Фев. 2, 2017 14:43:40

dremdem
Зарегистрирован: 2015-12-29
Сообщения: 42
Репутация: +  0  -
Профиль   Отправить e-mail  

Попытка сделать парсер для дневника https://mrko.mos.ru/dnevnik/

Ан нет, рановато закрывать.

Отряхну от пыли годовалую темку )

pgu.mos.ru похоже поменялся на mos.ru и авторизация поломалась.

Случайно никто на этой теме не завязан? А то попробовали бы порешать вместе.
Я 2-ой день бьюсь, пока безрезультатно.

Офлайн

#6 Фев. 3, 2017 12:13:01

dremdem
Зарегистрирован: 2015-12-29
Сообщения: 42
Репутация: +  0  -
Профиль   Отправить e-mail  

Попытка сделать парсер для дневника https://mrko.mos.ru/dnevnik/

Выяснилось, что переделали на OAuth 2.0
Буду пробовать освоить…

Офлайн

#7 Март 1, 2017 16:54:18

ninjatails
Зарегистрирован: 2017-03-01
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Попытка сделать парсер для дневника https://mrko.mos.ru/dnevnik/

Здравствуйте! Тоже интересуюсь этой темой. Обращайтесь в Телеграм - @MonsterDeveloper

Офлайн

  • Начало
  • » Data Mining
  • » Попытка сделать парсер для дневника https://mrko.mos.ru/dnevnik/[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version