[Python3填坑之旅]1、urllib模組網頁爬蟲訪問中文網址出錯
阿新 • • 發佈:2018-11-10
正在學習網頁爬蟲,用的Python3+urllib模組,當遇到連結裡有中文字元的時候總是報錯。之前以為是Python編碼的問題,不斷去嘗試不同的編碼去encode與decode,可以問題總是解決不了,沒有辦法繼續查閱資料,最後發現其實解決方法特別簡單。
- 問題描述
當我訪問帶有中文字元的網址時總會報錯:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 10-11: ordinal not in range(128)
最開始以為編碼問題,沒有解決
原始碼程式碼如下:
import urllib rooturl = "https://baike.baidu.com/item/" item = "爬蟲" url = rooturl+item print(url) request = urllib.request.Request(url=url) reponse = urllib.request.urlopen(request) result = reponse.read() result = str(result, encoding="utf-8") print(result)
- 解決方法
最後找到了問題,就是應為中文“爬蟲”出的問題,卻不是編碼問題。
原來是Python3的urllib模組urllib.request.Request()方法中無法處理帶有中文字元的連結,需要通過urllib.parse.quote()對中文字串轉換一下新增程式碼即可:
item = urllib.parse.quote(item)
但是要注意一點,只要對中文部分進行轉換,如果連結全部轉換也會報錯:
ValueError: unknown url type: 'https%3A//baike.baidu.com/item/%E7%88%AC%E8%99%AB'
完整程式碼:
import urllib rooturl = "https://baike.baidu.com/item/" item = "爬蟲" item = urllib.parse.quote(item) url = rooturl+item print(url) request = urllib.request.Request(url=url) reponse = urllib.request.urlopen(request) result = reponse.read() result = str(result, encoding="utf-8") print(result)
今天又踩了這個坑,我把它填平了,希望後來者路平攤些
謝謝觀看