python3 4爬蟲 urllib等模組的引用

2021-07-22 18:18:53 字數 2002 閱讀 1567

用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...