Подтвердить что ты не робот

Отправка веб-формы с использованием 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-адрес домашней страницы

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

import requests

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

print r.text

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

Большое спасибо!

4b9b3361

Ответ 1

Если вы хотите передать 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 -ting fooobar.com/questions/tagged/..., но я думаю, вы получите эту идею.

Ответ 2

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 для отправки запроса.

Ответ 3

Механизируйте библиотеку из 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