Python urllib2自动填表和检索结果

时间:2011-04-14 18:17:18

标签: python forms automation urllib2 urllib

我希望能够在网站上查询运行此脚本的计算机上的保修信息。如果需要,它应该能够填写表格(比如说HP的服务站点),然后就可以检索生成的网页。

我已经有了一些位来解析生成的html报告回来我只是遇到了需要做什么的麻烦,以便对需要放入字段的数据进行POST然后进行能够检索生成的页面。

3 个答案:

答案 0 :(得分: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替代品,其行为与真正的浏览器完全相同。许多网站都使用隐藏字段,cookie和重定向,默认情况下urllib2都没有为你处理,而机械化则是这样。

查看Emulating a browser in Python with mechanize以获得一个好例子。

答案 1 :(得分:1)

同时使用urlliburllib2

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

内容会为您提供页面来源。

答案 2 :(得分:0)

我只做了一点,但是:

  1. 您已获得表单页面的HTML。为您需要填写的每个表单字段提取name属性。
  2. 创建一个字典,使用您要提交的值映射每个表单字段的名称。
  3. 使用urllib.urlencode将字典转换为帖子请求的正文。
  4. 在提交表单的网址之后,将此编码数据作为urllib2.Request()的第二个参数包含在内。
  5. 服务器将返回生成的网页,或返回重定向到生成的网页。如果它执行后者,您需要向重定向响应中指定的URL发出GET请求。

    我希望这有点道理吗?