[英]Submitting to a web form using python
我见过很多次这样的问题,但没有一个是有帮助的
我试图将数据提交到网上的表格我已经尝试过请求,并且urllib和没有工作
例如,这里是应该在SO上搜索[python]标签的代码:
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
同样的结果! 我不明白为什么这些方法不起作用我已经在各种网站上尝试过但没有成功,所以如果有人成功完成了这个请告诉我如何!
非常感谢!
如果要使用requests
将q
作为参数传递给URL,请使用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 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的Mechanize库也很棒,甚至可以提交表单。 您可以使用以下代码创建浏览器对象并创建请求。
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.