Уведомления

Группа в Telegram: @pythonsu

#1 Июль 16, 2015 11:16:50

malkir
Зарегистрирован: 2015-07-14
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Автозаполнение при парселе

Есть!!! форма отправлена нормально, но все равно не строиться таблица .
вот код

from bs4 import BeautifulSoup
from urllib.parse import urlencode
import urllib.request 
def get_html():
    form_data  = {'station_id_from': '2200001', 'station_id_till': '2208536',
                             'station_from': 'Киів', 'station_till': 'Миколаів Пас',
                             'date_dep': '21.08.2015', 'time_dep': '00:00', 'time_dep_till': '',
                             'another_ec': '0', 'search': ''}
    params = urllib.parse.urlencode(form_data)
    params = params.encode('UTF-8')
    response = urllib.request.urlopen('http://booking.uz.gov.ua/', params)
    return response.read()
def parse(html):        
    soup = BeautifulSoup(html)
    table = soup.find('table', class_='vToolsDataTable')
    '''projects = []
    for row in table.find_all('tr'):
	    cols = row.find_all ('td')		
	    projects.append( {
		'title': cols[0].a.text
		})
    for project in projects:
	    print (project)'''
    print (table)
def main():
    parse (get_html())
if __name__=='__main__':
    main()

Отредактировано malkir (Июль 16, 2015 12:25:10)

Офлайн

#2 Июль 16, 2015 15:12:54

malkir
Зарегистрирован: 2015-07-14
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Автозаполнение при парселе

Я попробовал вывести params и получил кракозябли, поробовал form_data и получил нормальный текст. Есть способ вернуть читабельный текст в params?? Но на сайт приходит нормально читабельно Оо . Ну и ладно, хотя не понятно.

Отредактировано malkir (Июль 16, 2015 16:49:54)

Офлайн

#3 Июль 16, 2015 17:45:07

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Автозаполнение при парселе

py.user.next
Как ты узнал, что в любом браузере тебе показывают всё?

Я сказал
Budulianin
Да в любом браузере есть возможность запросы просмотреть)

Тут всё и не надо, достаточно посмотреть куда идут запросы и что в них отправляется.



Офлайн

#4 Июль 16, 2015 19:10:28

malkir
Зарегистрирован: 2015-07-14
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Автозаполнение при парселе

Budulianin
А что по моему коду? Чего может не создаваться таблица? Она создается только после ввода данных в форму. Я их переслал но таблица не построена

Офлайн

#5 Июль 17, 2015 00:00:34

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Автозаполнение при парселе

Budulianin
достаточно посмотреть куда идут запросы и что в них отправляется
Там не только посмотреть надо, но и скопировать точно.

Budulianin
Тут всё и не надо
Браузер не обязан это всё делать. Если он покажет что-нибудь неправильно (ну, там не всё или не в том порядке), то это не считается нарушением его функции.

Полагаться на браузер в этих вопросах - как полагаться на то, что тебе говорят в рекламе одеколона Axe. То есть как бы с одной стороны тебе говорят правду (одеколон даст некоторый дополнительный приток внимания), но с другой стороны эта правда немного кривая (если ты прыщавый, то ты всё равно прыщавый).

В то время как функция Wireshark заключается в точной передаче информации от сетевых интерфейсов пользователю. И когда ты копируешь через контекстное меню, можно быть уверенным, что скопируется не часть чего-то там, а всё, и что это “всё” - это действительно всё, а не только какой-то там “более важный” фрагмент.


malkir
Но на сайт приходит нормально читабельно Оо . Ну и ладно, хотя не понятно.
malkir
Чего может не создаваться таблица?
Что отвечает сайт на запрос?



Офлайн

#6 Июль 17, 2015 10:22:16

malkir
Зарегистрирован: 2015-07-14
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Автозаполнение при парселе

py.user.next
Сам скрипт пишет None а Wireshark то что на скрине.

Прикреплённый файлы:
attachment 11.jpg (503,7 KБ)

Офлайн

#7 Июль 17, 2015 11:35:43

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Автозаполнение при парселе

Для начала просто выведи текст на экран, без разбора. Убедись, что там таблица есть. А дальше отдельно для текста можешь подбирать правильный разбор.



Офлайн

#8 Июль 17, 2015 13:19:50

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Автозаполнение при парселе

py.user.next
Там не только посмотреть надо, но и скопировать точно.
OMG, парочка заголовков. Тебе их сложно скопировать из консоли? Может ты ей просто не умеешь пользоваться?)

py.user.next
Браузер не обязан это всё делать. Если он покажет что-нибудь неправильно (ну, там не всё или не в том порядке), то это не считается нарушением его функции.

Это работа браузера делать запрос и принимать ответ. А консоль это средство для РАЗРАБОТЧИКОВ, которые разрабатывают приложения для браузера. Естественно там есть все нужные инструменты, чтобы просмотреть что ушло и что пришло в запросе.

Нас интересует HTTP слой, ниже нам не нужно, поэтому wireshark тут ВООБЩЕ не нужен.

malkir
А что по моему коду? Чего может не создаваться таблица?
Какая ещё таблица? Видимо ты не понимаешь, что есть серверные приложения,
которые работают на сервере и предоставляют API. И есть клиентские приложения, например то, которое работает у тебя в браузере и строит тебе таблицу.

Дак вот, тебе нужны ДАННЫЕ, а данные отдаёт сервер. Отдаёт он их в формате JSON.
Всё что тебе нужно, это понять, что отправлять и в каком виде на сервер, чтобы он тебе отправлял в ответ
данные в формате JSON.

Забудь про wireshark, это тяжёлый инструмент, для более сложных задач.
Научись сначала пользоваться консолью браузера. Если научишься ей пользоваться, то скорее всего
тебе больше ничего не понадобится для подобных задач.

Короче надоело читать вашу переписку ни о чём.
Пошёл на сайт. Естественно открыл консоль, сделал запрос, мне пришёл ответ(твоя заветная таблица)
ВСЁ, я смотрю что мой браузер отправил. Вся фишка в дополнительных заголовках с частью GV-.
Клиент их добавляет в запрос. Посмотрел на них, скопировал к себе.

Дальше мне просто осталось сделать запрос с помощью библиотеки requests.
Не трогай библиотеку urllib, используй requests, она более высокоуровневая.

Взял, напихал заголовков:

{'Origin': 'http://booking.uz.gov.ua', 'Content-Length': 202, 'Accept-Encoding': 'gzip, deflate', 'Content-type': 'application/x-www-form-urlencoded', 'GV-Unique-Host': 1, 'GV-Ajax': 1, 'Accept': '*/*', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.132 Safari/537.36', 'GV-Screen': '1440x900', 'Connection': 'keep-alive', 'Cookie': '_gv_sessid=ega79pca50fjtpv4r02f2ul0p1; _gv_lang=uk; HTTPSERVERID=server2; __utma=31515437.727071730.1436907395.1437117867.1437123736.3; __utmb=31515437.2.10.1437123736; __utmc=31515437; __utmz=31515437.1437123736.3.3.utmcsr=python.su|utmccn=(referral)|utmcmd=referral|utmcct=/forum/topic/27685/', 'GV-Referer': 'http://booking.uz.gov.ua/', 'GV-Token': '092add0b9ab4a37f3b3a4e6c525ce2f7', 'GV-Referer-Src': 'http://python.su/forum/topic/27685/?page=1'}

Составил словарь с данными, которые буду отправлять на сервер:

{'another_ec': 0,
 'date_dep': u'24.07.2015',
 'search': '',
 'station_from': u'\u041a\u0438\u0457\u0432',
 'station_id_from': 2200001,
 'station_id_till': 2208001,
 'station_till': u'\u041e\u0434\u0435\u0441\u0430',
 'time_dep': u'00:00',
 'time_dep_till': ''}

Записал url:

url = 'http://booking.uz.gov.ua/purchase/search/'


Делаю запрос:

In [142]: requests.post(url, data=data, headers=h)
Out[142]: <Response [200]>

ВСЁ, никаких проблем!

Смотрю ответ:

In [145]: r.content
Out[145]: '{"value":[{"num":"761\\u041b","model":3,"category":1,"from":{"station_id":"2200001","station":"\\u041a\\u0438\\u0457\\u0432-\\u041f\\u0430\\u0441\\u0430\\u0436\\u0438\\u0440\\u0441\\u044c\\u043a\\u0438\\u0439","date":1437707520,"src_date":"2015-07-24 06:12:00"},"till":{"station_id":"2208001","station":"\\u041e\\u0434\\u0435\\u0441\\u0430-\\u0413\\u043e\\u043b\\u043e\\u0432\\u043d\\u0430","date":1437732360,"src_date":"2015-07-24 13:06:00"},"types":[{"title":"\\u0421\\u0438\\u0434\\u044f\\u0447\\u0438\\u0439 \\u043f\\u0435\\u0440\\u0448\\u043e\\u0433\\u043e \\u043a\\u043b\\u0430\\u0441\\u0443","letter":"\\u04211","places":124},{"title":"\\u0421\\u0438\\u0434\\u044f\\u0447\\u0438\\u0439 \\u0434\\u0440\\u0443\\u0433\\u043e\\u0433\\u043e \\u043a\\u043b\\u0430\\u0441\\u0443","letter":"\\u04212","places":283}]},{"num":"761\\u0428","model":3,"category":1,"from":{"station_id":"2200001","station":"\\u041a\\u0438\\u0457\\u0432-\\u041f\\u0430\\u0441\\u0430\\u0436\\u0438\\u0440\\u0441\\u044c\\u043a\\u0438\\u0439","date":1437707520,"src_date":"2015-07-24 06:12:00"},"till":{"station_id":"2208001","station":"\\u041e\\u0434\\u0435\\u0441\\u0430-\\u0413\\u043e\\u043b\\u043e\\u0432\\u043d\\u0430","date":1437732360,"src_date":"2015-07-24 13:06:00"},"types":[{"title":"\\u0421\\u0438\\u0434\\u044f\\u0447\\u0438\\u0439 \\u0434\\u0440\\u0443\\u0433\\u043e\\u0433\\u043e \\u043a\\u043b\\u0430\\u0441\\u0443","letter":"\\u04212","places":29}]},{"num":"023\\u041c","model":0,"category":0,"from":{"station_id":"2200001","station":"\\u041c\\u043e\\u0441\\u043a\\u0432\\u0430 \\u041a\\u0438\\u0435\\u0432\\u0441\\u043a\\u0430\\u044f","date":1437722340,"src_date":"2015-07-24 10:19:00"},"till":{"station_id":"2208001","station":"\\u041e\\u0434\\u0435\\u0441\\u0430-\\u0413\\u043e\\u043b\\u043e\\u0432\\u043d\\u0430","date":1437758820,"src_date":"2015-07-24 20:27:00"},"types":[{"title":"\\u041a\\u0443\\u043f\\u0435","letter":"\\u041a","places":5},{"title":"\\u041f\\u043b\\u0430\\u0446\\u043a\\u0430\\u0440\\u0442","letter":"\\u041f","places":16}]},{"num":"763\\u041a","model":3,"category":1,"from":{"station_id":"2200001","station":"\\u0414\\u0430\\u0440\\u043d\\u0438\\u0446\\u044f","date":1437745140,"src_date":"2015-07-24 16:39:00"},"till":{"station_id":"2208001","station":"\\u041e\\u0434\\u0435\\u0441\\u0430-\\u0413\\u043e\\u043b\\u043e\\u0432\\u043d\\u0430","date":1437769980,"src_date":"2015-07-24 23:33:00"},"types":[{"title":"\\u0421\\u0438\\u0434\\u044f\\u0447\\u0438\\u0439 \\u043f\\u0435\\u0440\\u0448\\u043e\\u0433\\u043e \\u043a\\u043b\\u0430\\u0441\\u0443","letter":"\\u04211","places":118},{"title":"\\u0421\\u0438\\u0434\\u044f\\u0447\\u0438\\u0439 \\u0434\\u0440\\u0443\\u0433\\u043e\\u0433\\u043e \\u043a\\u043b\\u0430\\u0441\\u0443","letter":"\\u04212","places":264}]},{"num":"763\\u041e","model":3,"category":1,"from":{"station_id":"2200001","station":"\\u0414\\u0430\\u0440\\u043d\\u0438\\u0446\\u044f","date":1437745140,"src_date":"2015-07-24 16:39:00"},"till":{"station_id":"2208001","station":"\\u041e\\u0434\\u0435\\u0441\\u0430-\\u0413\\u043e\\u043b\\u043e\\u0432\\u043d\\u0430","date":1437769980,"src_date":"2015-07-24 23:33:00"},"types":[{"title":"\\u0421\\u0438\\u0434\\u044f\\u0447\\u0438\\u0439 \\u0434\\u0440\\u0443\\u0433\\u043e\\u0433\\u043e \\u043a\\u043b\\u0430\\u0441\\u0443","letter":"\\u04212","places":80}]},{"num":"221\\u041a","model":0,"category":0,"from":{"station_id":"2200001","station":"\\u041a\\u0438\\u0457\\u0432-\\u041f\\u0430\\u0441\\u0430\\u0436\\u0438\\u0440\\u0441\\u044c\\u043a\\u0438\\u0439","date":1437757020,"src_date":"2015-07-24 19:57:00"},"till":{"station_id":"2208001","station":"\\u041e\\u0434\\u0435\\u0441\\u0430-\\u0413\\u043e\\u043b\\u043e\\u0432\\u043d\\u0430","date":1437790320,"src_date":"2015-07-25 05:12:00"},"types":[{"title":"\\u041b\\u044e\\u043a\\u0441","letter":"\\u041b","places":2}]}],"error":false,"data":null}'

Вот они данные, в формате JSON.

И никакого AXE эффекта у меня не было!



Офлайн

#9 Июль 18, 2015 02:17:23

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Автозаполнение при парселе

Budulianin
Тебе их сложно скопировать из консоли? Может ты ей просто не умеешь пользоваться?)
Да плохо сделана она. Она и не обязана быть хоть сколько-нибудь хорошей, потому что функция браузера заключается в просмотре страниц.

Budulianin
А консоль это средство для РАЗРАБОТЧИКОВ, которые разрабатывают приложения для браузера.
Консоль - это дополнение к браузеру, которое можно писать, можно не писать. Поэтому и делается она абы как.

Вот здесь ещё можно накопать что-то специализированное, но речь идёт о единообразном решении для всех браузеров. Wireshark даёт одинаковый профит, независимо от того, какой у тебя браузер. Да, кстати, если скрипт неправильно работает, то увидеть ты это сможешь тоже только через Wireshark, консоль от браузера тут не поможет.

Budulianin
Нас интересует HTTP слой, ниже нам не нужно, поэтому wireshark тут ВООБЩЕ не нужен.
Ты, наверное, не в курсе, но там есть фильтр. Я думаю, ты просто не знаешь потенциал фильтров в Wireshark, потому что он слишком сложен для тебя.
Он слишком сложный для тебя => ты его не юзаешь часто => не знаешь, как пользоваться фильтрами. :)



Отредактировано py.user.next (Июль 18, 2015 02:24:00)

Офлайн

#10 Июль 18, 2015 11:09:37

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Автозаполнение при парселе

py.user.next
Да плохо сделана она. Она и не обязана быть хоть сколько-нибудь хорошей,

Просто ты фронт никогда не разрабатывал, поэтому не знаешь, что там и как в консоли.

py.user.next
Консоль - это дополнение к браузеру, которое можно писать, можно не писать. Поэтому и делается она абы как.
Абы как она не делается, потому что её используют разработчики.

py.user.next
Вот здесь ещё можно накопать что-то специализированное, но речь идёт о единообразном решении для всех браузеров.
Нам просто нужно решить задачу, если у тебя chrome, то всё Ок. Другие браузеры и рассматривать не нужно.

py.user.next
Да, кстати, если скрипт неправильно работает, то увидеть ты это сможешь тоже только через Wireshark, консоль от браузера тут не поможет.
Если он неправильно работает, то я по работе скрипта это увижу)

py.user.next
Ты, наверное, не в курсе, но там есть фильтр.
В курсе) в курсе)

py.user.next
Я думаю, ты просто не знаешь потенциал фильтров в Wireshark, потому что он слишком сложен для тебя.
:)

py.user.next
Он слишком сложный для тебя => ты его не юзаешь часто => не знаешь, как пользоваться фильтрами. :)
Да, очень сложный :) Так же как и для тебя консоль браузера



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version