Уведомления

Группа в Telegram: @pythonsu

#1 Июль 14, 2015 21:28:24

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

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

Доброго времени суток! Это мой первый опыт знакомства с Python поэтому не судите строго! Есть сайт http://booking.uz.gov.ua/ при попытки парсить его приходят пустые поля так как там для построения таблицы нужно заполнить поля поиска. Вот собственно вопрос: чем можно и можно ли вообще заполнить поля для последующего парсела страницы? Или есть альтернативный способ парсела подобной страницы? Заранее спасибо.

Офлайн

#2 Июль 15, 2015 00:14:28

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

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

malkir
Вот собственно вопрос: чем можно и можно ли вообще заполнить поля для последующего парсела страницы?
Поставь Wireshark, заполни и посмотри, что отправляется.



Отредактировано py.user.next (Авг. 19, 2015 00:39:50)

Офлайн

#3 Июль 15, 2015 10:50:58

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

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

Установил, попытался увидеть что отправляется, не выходит . К сайту у меня только пользовательский доступ, и как мне эта программа поможет перед парселом заполнить форму для поиска?

Офлайн

#4 Июль 15, 2015 11:32:31

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

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

malkir
и как мне эта программа поможет перед парселом заполнить форму для поиска?
Форма просто собирает введённые данные и составляет запрос с ними для отправки на сервер. Задача скрипта заключается в том, чтобы сразу составить запрос. А для этого надо узнать его структуру, которую обычно видно через сниффер.



Офлайн

#5 Июль 15, 2015 12:51:20

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

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

py.user.next
Поставь wireshark, заполни и посмотри, что отправляется.
Wireshark это overhead, достаточно просто в консоли браузера посмотреть запросы.



Офлайн

#6 Июль 15, 2015 13:01:36

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

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

Угу вроде получил структуру . Теперь чем я могу их задать при парселе? Всмысле чтобы была построенна таблица сначала нужно используя эту структуру задать параметры для поиска. А как это сделать? Я так понимаю нужно сделать отдельный скрипт который будет это делать или можно все в один скрипт поместить? И чем эможно такое заполнение реализовать?

Прикреплённый файлы:
attachment 1.jpg (381,0 KБ)

Офлайн

#7 Июль 15, 2015 14:57:19

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

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

Budulianin
Wireshark это overhead, достаточно просто в консоли браузера посмотреть запросы.
Браузеры все разные, а Wireshark - не только один, но и показывает всё.

malkir
чем я могу их задать при парселе?
Не парселе, а парсинге.

malkir
чтобы была построенна таблица сначала нужно используя эту структуру задать параметры для поиска. А как это сделать?
Вот позадавай их разные, и посмотри, что отправляется при этом.
Там пост-запрос, в котором передаются переменные, поэтому надо сделать словарь и применить к нему urlencode().

>>> import urllib.parse
>>> 
>>> urllib.parse.urlencode({'a': 'b', 'c': 'd'})
'c=d&a=b'
>>>

Потом эти данные передаются в пост-запросе через urlopen() в аргументе data.

python.org. urlencode()
python.org. urlopen()



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

Офлайн

#8 Июль 15, 2015 16:25:07

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

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

py.user.next
Браузеры все разные, а Wireshark - не только один, но и показывает всё.

Да в любом браузере есть возможность запросы просмотреть)
Если бы нужно было ВСЁ, тогда wireshark и нужно использовать.
А тут всего ничего, поэтому overhead.



Отредактировано Budulianin (Июль 15, 2015 16:31:35)

Офлайн

#9 Июль 15, 2015 19:18:53

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

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

ммм что-то не выходит .
Как только не пробовал уже, что-то в коде вроде, может подскажете что?

from bs4 import BeautifulSoup
from urllib.parse import urlencode
import urllib.request
def getSerch():
    baseurl='http://booking.uz.gov.ua/'
    wert = {'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': ''}
    
    return (baseurl, urlencode(wert))
def get_html(url):
    response = urllib.request.urlopen(url)
    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('http://booking.uz.gov.ua/'))
if __name__=='__main__':
    main()

Отредактировано malkir (Июль 15, 2015 20:00:09)

Офлайн

#10 Июль 16, 2015 01:18:21

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

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

Budulianin
Да в любом браузере есть возможность запросы просмотреть)
Как ты узнал, что в любом браузере тебе показывают всё?
Их надо не только смотреть, но и вырезать из приложения. У Firefox'а для этого ничего не приспособлено. (Элементарное копирование поля не предусмотрено.)

Когда Wireshark показывает, это не только гарантирует верность и полноту данных, но и предоставляет удобный интерфейс для работы с ними.

malkir
может подскажете что?
Нет пост-запроса. Когда запускаешь скрипт, смотри так же через сниффер, что отправляется, равно ли оно тому же, что отправляет браузер.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version