LINUX.ORG.RU

[python] собрать результаты с ajax-based поиска

 


0

1

Заполняю форму поиска с большим количеством text box-ов с помощью такого кода:

import cookielib, urllib2, urllib

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) #cj

urllib2.install_opener(opener)

params = urllib.urlencode(dict(
    full_name='John',
    sale_id='8747779',
    pin_code='1543',
    debt='18390',
    problems='1',
    pnt_sr='',
    g_s_nofake='1',
) # на самом деле полей больше раз в 20

data = opener.open('http://search.domain.de/search/', params).read()
f = open("newfile_search.html", "w")
f.write(data)
f.close()

Проблема вот в чем. Сам поиск работает на AJAX. Если в браузере заполнить форму и нажать кнопку <search>, я увижу progress bar, написанный на JS, в котором будет полоса загрузки и что-то в духе «ожидайте, выполняется поиск» (база большая, обычно жду секунд 15-20). После того, как поиск завершен - результаты поиска появляются _под_ формой поиска на той же странице, то есть на сколько я понимаю с помощью AJAX, так как визуально страница не перезагружается.

Вопрос. Как мне собрать результаты поиска выдаваемые с помощью AJAX? В приведенном выше коде я получаю страницу с заполненными полями и очень быстро. Секунды за 2. Хотя такого быстрого поиска я ни разу не видел. Естественно, результатов поиска - нет.

Что делать? Спасибо за помощь

Ответ на: комментарий от dens-dens-dens

В firefox есть такое расширение для веб-разработчиков - firebug. Среди прочего, firebug умеет отображать все http-запросы, идущие со страницы (вместе с заголовоками и телами запросов и ответов). В chrome/safari/любом другом браузере на web kit есть developer tools, которые умеют делать то же самое.

С помощью этих инструментов можно посмотреть, какой запрос отправляется, и что он возвращает.

dmitry_vk ★★★
()
Ответ на: комментарий от dmitry_vk

firebug умеет отображать все http-запросы, идущие со страницы (вместе с заголовоками и телами запросов и ответов)

Это на вкладке console? POST - то, что отправляю я. Response - то, что получается браузер. Headers - заголовки, которые отправляет мне сервер. И как мне получить данные из Response? Скажем, в python-строку.

dens-dens-dens
() автор топика
Ответ на: комментарий от dens-dens-dens

поставь wireshark и посмотри какие запросы шлёт браузер. Там есть такая фишка, называется follow tcp stream. Вот она в текстовом виде всё покажет.

true_admin ★★★★★
()

Могу предложить использовать urllib2.Request и urllib2.urlopen, пошлете POST запрос и получите ответ сервера, используя read

l0k9j8
()
Ответ на: комментарий от true_admin

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

baverman ★★★
()
Ответ на: комментарий от dens-dens-dens

Тебе нужно найти Response, который возвращает нужные данные и посредством urllib выполнить соответствующий Request.

baverman ★★★
()
Ответ на: комментарий от dens-dens-dens

>И как мне получить данные из Response? Скажем, в python-строку.

Надо сделать аналогичный запросами средствами питона. Firebug тут только поможет понять, что ожидает сервер от клиента и что он присылает.

dmitry_vk ★★★
()
Ответ на: комментарий от baverman

гораздо удобнее просмотра сырых данных.

а нихрена не вредный совет, это generic-решение которое в будущем не раз пригодится. Да, есть всякие хрени для браузера, но они работают только с браузером и только с http.

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

Я, понимаю, для общего образования это крайне полезно, но ТСу вполне хватит веселья, даже с удобным представлением запроса. Он и так потерян, а твое предложение выглядит не иначе, как злой шуткой.

baverman ★★★
()
Ответ на: комментарий от baverman

это один из самых простых и наглядных инструментов для анализа трафика. Там всё абсолютно понятно.

Куда уж проще этого?

Потом что мешает тебе предложить более удобную альтернативу? Скажи что какой-нить firebug в сто раз удобнее.

У меня нет цели с кем-то ругаться, что-то доказывать, самоутверждаться или издеваться. Я от этого удовольствия не получаю.

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

Куда уж проще этого?

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

Это же финальная картинка. Чтобы ее получить надо изрядно потрудиться. А в firebug-е надо только нажать на кнопочку «найти» или как она там у ТС.

baverman ★★★
()
Ответ на: комментарий от true_admin

Да, wireshark не раз спасал, когда надо было отлаживать сетевое взаимодействие. Но в случае HTTP удобнее пользоваться firebug'ом или chromium developer tools.

dmitry_vk ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.