Отправка запросов на веб-страницы с помощью urllib2 Python

Я заинтересован в использовании Python для автоматизации определенных задач. В частности, я хотел бы использовать Python для взаимодействия с веб-сайтом для выполнения таких задач, как получение конкретной информации со страницы, выполнение запроса (данные POST и чтение ответа), а также загрузка и выгрузка файлов. До сих пор мне удавалось использовать Python только для получения HTML-кода со страницы с помощью urllib2. Следующее, что я попробовал, это отправить запрос на страницу; Я сделал несколько попыток, но все они потерпели неудачу.

    >>> import urllib2
    >>> import urllib
    >>> url = "http://www.stackoverflow.com/"
    >>> values = {}
    >>> values["input"] = "foo"
    >>> data = urllib.urlencode(values)
    >>> request = urllib2.Request(url + "search/", data)
    >>> response = urllib2.urlopen(request)
    >>> html = response.read()
    >>> print html

Пока я понимаю, что мне нужно создать словарь с именами полей и входных данных и закодировать его с помощью urllib.urllencode(values). Затем мне нужно сделать запрос с urllib2.Request(theUrlReceiveTheRequest, data, headers), который, если только указан URL-адрес, будет только GET, но, если предоставлены данные, будет POST, и могут быть предоставлены заголовки, которые могут замаскировать программу как распространенный браузер, такой как Firefox или IE. Затем я получаю ответ с urllib2.urlopen(request), который возвращает файл, подобный объекту, который, следовательно, я могу читать(). Насколько я понимаю, я также могу использовать urllib2.build_opener(), который может получать обработчики (которые могут обрабатывать файлы cookie, перенаправления, аутентификацию и т. д.) и добавлять заголовки с помощью .addheaders("User-Agent", ""). Я хотел бы иметь возможность в конечном итоге делать (и понимать) все эти вещи, но, во-первых, я просто хотел бы отправить форму.В приведенном выше коде из моего интерактивного сеанса с Python я следовал правильной процедуре? (Я пытался ввести поиск «foo» в поле поиска на первой странице stackoverflow.)

0
задан Anurag Uniyal 26 April 2012 в 23:40
поделиться