使用爬蟲爬取網頁經常遇到各種編碼問題,因此產生亂碼
今天折騰了一天,全部總結一遍
import requests
url=""
response = requests.get(url)
content = response.text
print(content)
結果有**顯示,但是出現亂碼
使用urllib庫
import urllib.request
response = urllib.request.urlopen('')
print(response.read())
結果有**顯示,但是以二進位制返回
接下來介紹encode()和decode()方法
encode()用於解碼,decode()方法用於編碼
注:python3預設編碼為utf-8
例1:text = '中華'
print(type(text))
print(text.encode('gbk'))#以gbk形式解碼,即把utf-8的字串text轉換成gbk編碼
print(text.encode('utf-8'))#以utf-8形式解碼,因為原本是utf-8編碼,所以返回二進位制
print(text.encode('iso-8859-1'))#報錯
返回結果:
b'\xd6\xd0\xbb\xaa'
b'\xe4\xb8\xad\xe5\x8d\x8e'
unicodeencodeerror: 'latin-1' codec can't encode characters in position 0-1: ordinal not in range(256)
為什麼第四個報錯?
我查尋了一下latin-1是什麼?
latin1是iso-8859-1的別名,有些環境下寫作latin-1。
iso-8859-1編碼是單位元組編碼。
unicode其實是latin1的擴充套件。只有乙個低位元組的uncode字元其實就是latin1字元(這裡認為unicode是兩個位元組,事實上因為各種版本不一樣,位元組數也不一樣)
所以我的理解是:因為中文至少兩個位元組,所以不能解碼出來
例2:text = '中華'
print(type(text)) #
text1 = text.encode('gbk')
print(type(text1)) #
print(text1) #b'\xd6\xd0\xbb\xaa'
text2 = text1.decode('gbk')
print(type(text2)) #
print(text2) #中華
text3 = text1.decode('utf-8') #報錯:unicodedecodeerror: 'utf-8' codec can't decode byte 0xd6 in position 0: invalid continuation byte
print(text3)
text4= text.encode('utf-8')
print(type(text4)) #
print(text4) #b'\xe4\xb8\xad\xe5\x8d\x8e'
text5 = text4.decode('utf-8')
print(type(text5)) #
print(text5) #中華
text6 = text4.decode('gbk') #報錯:unicodedecodeerror: 'gbk' codec can't decode byte 0xad in position 2: illegal multibyte sequence
print(text6)
import requests
url=""
response = requests.get(url)
content = response.text.encode('iso-8859-1').decode('utf-8')
#把網頁源**解碼成unicode編碼,然後用utf-8編碼
print(content)
使用urllib庫
import urllib.request
response = urllib.request.urlopen('')
print(response.read().decode(utf-8))
2.關於網頁源**是gbk或者gb2312編碼的網頁:
import requests
response = requests.get('')
#print(response.text)
html = response.text
print(html)
結果返回亂碼
import urllib.request
#get請求
response = urllib.request.urlopen('')
print(response.read())
結果返回二進位制
正確**:
import requests
response = requests.get('')
#print(response.text)
html = response.text.encode('iso-8859-1').decode('gbk')
print(html)
import urllib.request
#get請求
response = urllib.request.urlopen('')
print(response.read().decode('gbk'))
附:如何看網頁源**的編碼格式?
使用f12檢視網頁源**的head標籤裡的meta標籤
如:
python3爬蟲編碼問題
使用爬蟲爬取網頁經常遇到各種編碼問題,因此產生亂碼 今天折騰了一天,全部總結一遍 import requests url response requests.get url content response.text print content 結果有 顯示,但是出現亂碼 使用urllib庫 imp...
Python3編碼問題
python3最重要的進步之一就是解決了python2中字串與字元編碼的問題。python2字串的缺陷如下 而python3則把系統預設編碼設定為了 utf 8 import sys sys.getdefaultencoding utf 8 之後,文字字元和二進位制資料分別用str和bytes表示。...
python3編碼問題
編碼問題 在python3中只有兩種資料型別 1 str 編碼形式是unicode,unicode任一字元編碼都存在 2 bytes 編碼形式是十六進製制 編碼encoding utf,gbk都只是一種編碼規則,按照各自的規則進行編碼,可以存在多種編碼規則 s hello中國 在記憶體中是以unic...