天天看點

python3安裝urllib3庫_Python3 安裝builtwith 和urllib包

python3安裝urllib3庫_Python3 安裝builtwith 和urllib包

買了本人民郵電的用Python寫網絡爬蟲,拿到一看蠻無語的,裡面每頁排版好大的字,就像連環畫一樣,按照正常排版估計可以少用一半的紙.

那就按照書學吧,沒想到第一章就擱屁了....

第一個builtwith子產品是用在Python2.X下的,我用的是3.4,不相容,可以安裝但是運作出錯.

先用python自帶的

2to3工具轉換下看看,位置在\Tools\Scripts\2to3.py 。

python

C:\Python34\Tools\Scripts\2to3.py -w __init__.py,加-w參數直接覆寫,會生成一個bak

備份檔案,如果要去除,再加個-n. 這個工具可以把2.X的文法轉換成3.X的,不過不算太智能,我原先改過的print已經加過(

),沒想到運作後它又在原來的地方再加了一個( )

運作出了個"Exception,

e"錯誤,原來3.X不支援這種寫法,需要改成 Exception as e .

運作繼續出錯,貌似沒有安裝urllib2包,用pip

install 安裝根本找不到,大概也更新了吧,裝urllib3倒是成功了,不過稍稍查了下,2和3的方法不大一樣,沒辦法直接用啊,又查了下原來2.X中的urllib2子產品,在3.X中拆成了urllib.request和urllib.error兩個子產品,直接用urllib.request這個子產品就行,這個子產品貌似3.X自帶,前面傻呼呼還去pip

install,也是找不到的. 把代碼中的 urllib2

全部替換成 urllib.request就可以了.

哈哈,現在可以用了把,繼續出錯.....現在出錯代碼是can't use a string pattern on a

bytes-like object ,按出錯資訊搜尋,好像是這樣說的

In Python 2.x, str = bytes and it'll automatically coerce str to

unicode as necessary (causing a UnicodeDecodeError if the string

contains characters outside the 7-bit ASCII range... which isn't a

problem with hard-coded regex patterns).

In Python 3.x, str = unicode and it treats str<->bytes

conversion as strictly as it treats str<->int

conversion.

看的稀裡糊塗,反正又是2.X-->3.X的問題,頁面需要重新解碼,看看代碼在可能的地方加了句html =

html.decode('utf-8')

python3安裝urllib3庫_Python3 安裝builtwith 和urllib包

終于完成第一個例子,不知道後面還有沒有相容問題.