Python/Web Page Harvesting

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