Как использовать urllib для заполнения форм и сбора данных?

Я родом из мира научных вычислений и обработки чисел.

Я пытаюсь взаимодействовать с Интернетом для сбора данных, поэтому мне это не нужно. Одна из задач — автоматически заполнять поисковые запросы на Marriott.com, чтобы я мог самостоятельно увидеть, какие предложения самые выгодные.

Я попытался сделать что-то простое, например

import urllib
import urllib2

url = "http://marriott.com"


values  = {'Location':'New York'}
data = urllib.urlencode(values)

website = urllib2.Request(url, data)
response = urllib2.urlopen(website)
stuff = response.read()
f = open('test.html','w')
f.write(stuff)

Мои вопросы следующие:

  1. Откуда вы знаете, как веб-сайт получает информацию?
    Откуда я знаю, что простая "Публикация" будет работать?
  2. Если просто, то откуда мне знать, какие должны быть имена словаря для "Значений?"
  3. Как проверить, работает ли он? Строки записи в конце — это попытка проверить, правильно ли работают мои входные данные, но этого недостаточно.

person David Folkner    schedule 20.09.2013    source источник
comment
возможный дубликат Python Auto Fill with Mechanize   -  person    schedule 20.09.2013


Ответы (3)


Вы также можете взглянуть на splinter, где urllib может оказаться бесполезным (JS, AJAX и т. д.). может быть полезно узнать параметры формы firebug.

person shantanoo    schedule 20.09.2013

Вам необходимо прочитать и проанализировать HTML-код соответствующей стороны. В каждом браузере есть достойные инструменты для изучения DOM сайта, анализа сетевого трафика и запросов.

Обычно вы хотите использовать модуль механизировать для автоматизированного взаимодействия с веб-сайтом. Нет никакой гарантии, что это сработает в каждом случае. В настоящее время многие веб-сайты используют AJAX или более сложное программирование на стороне клиента, что затрудняет «эмулирование» пользователя-человека с помощью Python.

Кроме того: на сайте mariott.com нет поля ввода "Местоположение"... значит, вы угадываете параметры URL, проанализировав их форму и функциональность?

person Community    schedule 20.09.2013

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

    Для этого я использую Charles Proxy

    Другой способ — просмотреть сохраненный вами html-файл (в данном случае test.html), просмотреть его в браузере и сравнить его с фактическим ответом на запрос.

  2. Чтобы узнать, что должно быть в словаре, посмотрите на исходный код страницы и узнайте имена форм, которые вы пытаетесь заполнить. в вашем случае "location"на самом деле должно быть "destinationAddress.destination"

    Вот картинка: Name

    Поэтому загляните в код HTML, чтобы получить имена форм, и это то, что должно быть в словаре. я знаю, что в Google Chrome и Mozilla Firefox есть инструменты для просмотра структуры html (на картинке я использовал элемент проверки в Google Chrome)

для получения дополнительной информации о urllib2 прочитайте здесь

Я очень надеюсь, что это поможет :)

person Serial    schedule 20.09.2013