Python urllib2 自动填写表单并获取结果
我想要查询一个网站上的机器保修信息,这个脚本会在那台机器上运行。如果需要的话,它应该能够填写一个表单(比如在惠普的服务网站上),然后获取返回的网页。
我已经有了处理返回的HTML内容的部分代码,但我现在遇到的问题是,如何把需要填写的数据发送出去(也就是做一个POST请求),然后再获取到返回的网页。
3 个回答
0
我只做过一点这方面的事情,但我来给你简单说一下:
- 首先,你需要有表单页面的HTML代码。找出每个需要填写的表单字段的
name
属性。 - 然后,创建一个字典,把每个表单字段的名字和你想提交的值对应起来。
- 接着,使用
urllib.urlencode
把这个字典转换成你要发送的请求内容。 - 最后,把这个编码后的数据作为第二个参数,放在
urllib2.Request()
里,紧跟着你要提交表单的URL。
服务器会返回一个结果网页,或者会把你重定向到一个结果网页。如果是后者,你需要对重定向响应中指定的URL发起一个GET
请求。
希望这样说你能明白?
16
如果你真的需要使用urllib2,基本的要点是这样的:
import urllib
import urllib2
url = 'http://whatever.foo/form.html'
form_data = {'field1': 'value1', 'field2': 'value2'}
params = urllib.urlencode(form_data)
response = urllib2.urlopen(url, params)
data = response.read()
当你发送POST数据(也就是传给urlopen()
的第二个参数)时,请求的方法会自动设置为POST。
我建议你还是用mechanize,这是一个完全替代urllib2的工具,它的工作方式就像一个真正的浏览器。很多网站使用隐藏字段、cookies和重定向,而这些urllib2默认是处理不了的,但mechanize可以。
你可以看看用mechanize在Python中模拟浏览器,那是个很好的例子。