Отправка веб-формы с использованием 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
тот же результат! Я не понимаю, почему эти методы не работают, я пробовал их на разных сайтах без успеха, поэтому, если кто-то успешно это сделал, пожалуйста, покажи мне, как!
Большое спасибо!
Ответы
Ответ 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