2011-04-14 58 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