Python urllib2 自动填写表单并获取结果

9 投票
3 回答
24335 浏览
提问于 2025-04-16 15:45

我想要查询一个网站上的机器保修信息,这个脚本会在那台机器上运行。如果需要的话,它应该能够填写一个表单(比如在惠普的服务网站上),然后获取返回的网页。

我已经有了处理返回的HTML内容的部分代码,但我现在遇到的问题是,如何把需要填写的数据发送出去(也就是做一个POST请求),然后再获取到返回的网页。

3 个回答

0

我只做过一点这方面的事情,但我来给你简单说一下:

  1. 首先,你需要有表单页面的HTML代码。找出每个需要填写的表单字段的name属性。
  2. 然后,创建一个字典,把每个表单字段的名字和你想提交的值对应起来。
  3. 接着,使用urllib.urlencode把这个字典转换成你要发送的请求内容。
  4. 最后,把这个编码后的数据作为第二个参数,放在urllib2.Request()里,紧跟着你要提交表单的URL。

服务器会返回一个结果网页,或者会把你重定向到一个结果网页。如果是后者,你需要对重定向响应中指定的URL发起一个GET请求。

希望这样说你能明白?

1

使用 urlliburllib2 这两个库,

data = urllib.urlencode([('field1',val1), ('field2',val2)]) # list of two-element tuples
content = urllib2.urlopen('post-url', data)

你可以获取网页的源代码。

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中模拟浏览器,那是个很好的例子。

撰写回答