Python/Web Page Harvesting
< Python
urllib
編輯urllib等模塊的API是為早期時代的互聯網所創建的。需要巨量的工作,甚至包括各種方法覆蓋,來完成最簡單的任務。
import urllib.request
f = urllib.request.urlopen('http://www.webxml.com.cn//webservices/qqOnlineWebService.asmx/qqCheckOnline?qqCode=424662508')
result = f.read().decode('utf-8')
req = urllib.request.Request('http://www.example.com/')
req.add_header('Referer', 'http://www.python.org/')
r = urllib.request.urlopen(req)
result = f.read().decode('utf-8')
獲取網頁內容的例子:
import urllib.request as urllib
pageText = urllib.urlopen("http://www.spam.org/eggs.html").read()
print pageText
urllib模塊好包括一些設計互聯網的工具函數:
- 函數urlencode把一個字典的鍵-值對轉換為查詢字符串用於URL。
- 函數quote 與 quote_plus 編碼正常字符串
- 函數unquote 與 unquote_plus把url編碼的字符串轉換為平常文本。
Get 與 post 使用:
import urllib.request as urllib
params = urllib.urlencode({"plato":1, "socrates":10, "sophokles":4, "arkhimedes":11})
# Using GET method
pageText = urllib.urlopen("http://international-philosophy.com/greece?%s" % params).read()
print pageText
# Using POST method
pageText = urllib.urlopen("http://international-philosophy.com/greece", params).read()
print pageText
>>> plain_text = "This isn't suitable for putting in a URL"
>>> print urllib.quote(plain_text)
This%20isn%27t%20suitable%20for%20putting%20in%20a%20URL
>>> print urllib.quote_plus(plain_text)
This+isn%27t+suitable+for+putting+in+a+URL
- urllib.quote(string[,safe]) 對字符串進行編碼。參數safe指定了不需要編碼的字符
- urllib.unquote(string) 對字符串進行解碼
- urllib.quote_plus(string[,safe]) 與urllib.quote類似,但這個方法用『+『來替換『 『,而quote用『%20『來代替『 『
- urllib.unquote_plus(string ) 對字符串進行解碼
- urllib.urlencode(query[,doseq]) 將dict或者包含兩個元素的元組列錶轉換成url參數。
- 例如 字典{『name『:『wklken『,『pwd『:『123『}將被轉換為」name=wklken&pwd=123″
- urllib.pathname2url(path) 將本地路徑轉換成url路徑
- urllib.url2pathname(path) 將url路徑轉換成本地路徑
- urllib.urlretrieve(url[,filename[,reporthook[,data]]]) 下載遠程數據到本地
- filename:指定保存到本地的路徑(若未指定該,urllib生成一個臨時文件保存數據)
- reporthook:回調函數,當連接上伺服器、以及相應的數據塊傳輸完畢的時候會觸發該回調
- data:指post到伺服器的數據
- rulrs = urllib.urlopen(url[,data[,proxies]]) 抓取網頁信息,[data]post數據到Url,proxies設置的代理
- urlrs.readline() 跟文件對象使用一樣
- urlrs.readlines() 跟文件對象使用一樣
- urlrs.fileno() 跟文件對象使用一樣
- urlrs.close() 跟文件對象使用一樣
- urlrs.info() 返回一個httplib.HTTPMessage對象,表示遠程伺服器返回的頭信息
- urlrs.getcode() 獲取請求返回狀態HTTP狀態碼
- urlrs.geturl() 返回請求的URL