2011-04-14 83 views
9

我期望能够在该脚本将运行的计算机上查询站点的保修信息。如果需要的话,它应该能够填写表格(就像惠普的服务网站那样),然后就可以检索生成的网页。Python urllib2自动填写表单并检索结果

我已经有了一些位来解析报告的结果html我只是遇到了麻烦,需要做什么才能做一个POST的数据需要放在字段中,然后能够检索结果页面。

回答

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替代品,其功能与真正的浏览器完全相同。很多网站都使用隐藏字段,cookie和重定向,默认情况下,urllib2都不会为您处理这些内容,机械化的作用就在此处。

退房Emulating a browser in Python with mechanize就是一个很好的例子。

+2

我也会投入机械化。我已经使用过很多次了。真的很有用,比urllib和urllib2更容易做复杂的事情。 – 2011-04-14 20:33:43

+0

我同意。机械化是做这件事的标准工具。除非你绝对必须,否则不要使用urllib2。 – 2011-04-14 20:42:58