Отправка веб-формы с использованием python

Я видел такие вопросы, которые задавали много раз, но никто не помогает

Я пытаюсь отправить данные в форму на веб-сайте проверенных запросов, а urllib и никто не работал

например, вот код, который должен искать тег [python] в SO:

import urllib import urllib2 url = 'http://stackoverflow.com/' # Prepare the data values = {'q' : '[python]'} data = urllib.urlencode(values) # Send HTTP POST request req = urllib2.Request(url, data) response = urllib2.urlopen(req) html = response.read() # Print the result print html 

но когда я запускаю его, я получаю html soure на домашней странице

вот пример использования запросов:

 import requests data= { 'q': '[python]' } r = requests.get('http://stackoverflow.com', data=data) print r.text 

такой же результат! Я не понимаю, почему эти методы не работают, я пробовал их на разных сайтах без успеха, поэтому, если кто-то успешно это сделал, пожалуйста, покажите мне, как это сделать!

Спасибо!

  • Аутентификация Windows с помощью Python и urllib2
  • Закрыть соединение urllib2
  • Имеет ли urllib2.urlopen () кеш-файл?
  • Как добавить заголовок в urllib2?
  • Как использовать python urllib2 для отправки данных json для входа в систему
  • urllib2 несколько заголовков Set-Cookie в ответ
  • Загрузка изображения через urllib и python
  • Python urllib2 с продолжением
  • 3 Solutions collect form web for “Отправка веб-формы с использованием python”

    Если вы хотите передать q в качестве параметра в URL-адресе с помощью requests , используйте аргумент params , а не data (см. « Передача параметров в URL-адресах» ):

     r = requests.get('http://stackoverflow.com', params=data) 

    Это запросит https://stackoverflow.com/?q=%5Bpython%5D , что не является тем, что вы ищете.

    Вы действительно хотите POST в форму . Попробуй это:

     r = requests.post('https://stackoverflow.com/search', data=data) 

    Это по сути то же самое, что GET https://stackoverflow.com/questions/tagged/python, но я думаю, что вы получите эту идею.

     import urllib import urllib2 url = 'http://www.someserver.com/cgi-bin/register.cgi' values = {'name' : 'Michael Foord', 'location' : 'Northampton', 'language' : 'Python' } data = urllib.urlencode(values) req = urllib2.Request(url, data) response = urllib2.urlopen(req) the_page = response.read() 

    Это делает запрос POST с данными, указанными в значениях. нам нужно urllib для кодирования url, а затем urllib2 для отправки запроса.

    Механизировать библиотеку из python также отлично позволяет вам даже отправлять формы. Вы можете использовать следующий код для создания объекта браузера и создания запросов.

     import mechanize,re br = mechanize.Browser() br.set_handle_robots(False) # ignore robots br.set_handle_refresh(False) # can sometimes hang without this br.addheaders = [('User-agent', 'Firefox')] br.open( "http://google.com" ) br.select_form( 'f' ) br.form[ 'q' ] = 'foo' br.submit() resp = None for link in br.links(): siteMatch = re.compile( 'www.foofighters.com' ).search( link.url ) if siteMatch: resp = br.follow_link( link ) break content = resp.get_data() print content 
    Python - лучший язык программирования в мире.