url = ""
response = requests.get(url,headers = header) #此處header並未具體寫出
print(response.text)
header中的引數錯誤,**輸出後的產生亂碼
accept-encoding: gzip, deflate
解決方法:
出現了問題,網上的解決辦法是把請求頭header中的這行**注釋掉
出現原因:
瀏覽器對於從伺服器中返回的對應的gzip壓縮的網頁,會自動解壓縮,所以,其request的時候,新增對應的頭,表明自己接受壓縮後的資料。而此**中,如果也新增此頭資訊,結果就是,返回的壓縮後的資料,沒有解碼,而將壓縮後的資料當做普通的html文本來處理,當前顯示出來的內容,是亂碼了。
出現亂碼的原因:
當源網頁編碼和爬取下來後的編碼轉換不一致時,如源網頁為gbk編碼的位元組流,而我們抓取下後程式直接使用utf-8進行編碼並輸出到儲存檔案中,這必然會引起亂碼。
即當源網頁編碼和抓取下來後程式直接使用處理編碼一致時,則不會出現亂碼,此時再進行統一的字元編碼也就不會出現亂碼了。
最終爬取的所有網頁無論何種編碼格式,都轉化為utf-8格式進行儲存。
解決方法:
1.先觀察網頁內容屬於什麼碼:
print(response.encoding)
2.將內容轉碼:
#-*-coding:utf-8-*-
import requests
from bs4 import beautifulsoup
header =
url = ""
content = requests.get(url,headers = header)
demo = content.text.encode("iso-8859-1").decode("gbk")
soup = beautifulsoup(demo,"html.parser")
print(soup)
總結python中的亂碼問題
首先要知道,字串在python內部的表示是unicode編碼 萬國碼 因此,在做編碼轉換時,通常需要以unicode作為中間編碼,即先將其他編碼的字串解碼 decode 成unicode,再從unicode編碼 encode 成另一種編碼。python編碼有兩種資料模型來支援字串型別 一種是str ...
關於亂碼的問題
size medium 時常會發現在頁面顯示亂碼的問題,如果是從表的取出中文,則需要在呼叫request的獲取引數的方法之前呼叫request.setcharacterencoding gbk 如果要在頁面上顯示,需要在獲取相應的輸出流之前既response.getwriter 之前 呼叫respo...
關於亂碼的問題
我之前的認知一直是亂碼的原因是編碼和解碼的方式沒有對應,所謂三碼合一的問題,存在計算機底層的資料都是二進位制的形式,但是今天在看廖雪峰的教程時寫道 搞清楚了ascii unicode和utf 8的關係,我們就可以總結一下現在計算機系統通用的字元編碼工作方式 在計算機記憶體中,統一使用unicode編...