用python寫爬蟲程式的時候經常使用的庫肯定是urllib,除此之外,還有urllib2和cookielib等,但是由於python版本的更新,在一些庫和方法的使用上python3並不能向下相容。所以在寫爬蟲程式時並不能按照python2的引用方法。現將urllib等方法的引用方法歸納如下(以python3.4為例,是否會適用python3.2等版本不可知):
首先,python3.4中,而是將urllib2、urlparse、robotparser併入了urllib模組,並且修改了urllib模組,其中包含了5個子模組,每個子模組中的常用方法如下:
quote_plus;quote_from_bytes;urlencode;to_bytes;unwrap;splittype;splithost;splituser;splitpasswd;splitport等;
以上方法並沒有列舉完全,具體的每個子塊的所有類和方法可以在python安裝包裡的lib/urllib下查詢(如果不是python3.4.3版本的python版本,可以到這個目錄下面查詢相應的方法。)
另外,python2中的cookielib,在python3.4中重新命名為http.cookiejar. 引用時直接import http.cookiejar 即可。
最後,由於python3嚴格區分bytes和str型別,並且這兩種型別不能以任意隱式方式使用,但是urllib中的有些方法對於str和bytes有嚴格的規定,比如下面這段**:
values={}
values['username']="";
values['password']="";
data=urllib.parse.urlencode(values)
url=""
request=urllib.request.request(url,data)
response=urllib.request.urlopen(request)
print(response.read().decode('utf-8'))
這段**在python3.4上執行時會報錯:「typeerror: post data should be bytes or an iterable of bytes. it cannot be of type str.」這句話的意思就是說:urllib.request.request(url,data)中的data必須是bytes型別,但是urllib.parse.urlencode(values)產生的data的型別是str,所以遇到這種情況就需要進行str和bytes的轉化:
從str到bytes:呼叫方法encode('utf-8'). 所以,上邊**需要改寫成:data=urllib.parse.urlencode(values).encode('utf-8')
從bytes到str:呼叫方法decode('utf-8').
Python3 4安裝日記
環境 python3.4.0,win32 安裝過python2.7,然而謎之原因解除安裝了,其實2.7和3.4可以共存。在登錄檔和path內刪除了python2.7的記錄,然後安裝py3.4。尚未找到原因,估計是某個lib過於古老。解除安裝重新安裝python 3.4,可以使用pip 始終建議使用p...
Python3 4執行緒入門
比較成熟的程式語言,基本上都有對執行緒的支援,而python也不例外,下面散仙來看下python裡面對幾個執行緒比較的類或方法 python多執行緒程式設計,一般使用thread和threading模組。thread模組想對較底層,threading模組對thread模組進行了封裝,更便於使用。所有...
爬蟲 Python爬蟲學習筆記之Urllib庫
1.urllib.request開啟和讀取url 2.urllib.error包含urllib.request各種錯誤的模組 3.urllib.parse解析url 4.urllib.robotparse解析 robots.txt檔案 傳送get請求 引入urlopen庫 用於開啟網頁 from u...