python爬取亂碼,python讀取中文亂碼

本文目錄一覽:

為什麼python爬取的中文亂碼

編碼錯了唄,python的bytes,默認的decode參數utf-8,如果網頁不是utf-8的,你就得手動指定編碼,國內很多網頁是gbk、gb2312的

python爬蟲爬到的中文亂碼怎麼辦

爬到的內容,肯定是某種編碼格式(utf-8/gb2312等)的字符串。只需要對它相應的decode一下就可以了。

比如:如果網頁內容是utf-8編碼的,就:’xxx’.decode(‘utf-8’);

如果是gb2312編碼的,就:’xxx’.decode(‘gb2312’)

python爬蟲抓取到的數據用網頁打開時是亂碼,怎麼解決

寫爬蟲是經常會遇到這樣的問題,這種問題很顯然是編碼問題,解決的方法其實也不難。

你可以用下面的兩個方法來解決你的編碼問題:

第一種是,通過瀏覽器打開你寫的html之後,找到瀏覽器中的文字編碼修改,將編碼改為Unicode編碼,即可修復。

第二種方法是修改你的前端代碼:在你的代碼output_html方法中,規定網頁的文字編碼即可

Python+requests 爬取網站遇到中文亂碼怎麼辦

1. 遇到的中文亂碼問題

1.1 簡單的開始

使用requests來拔取網站內容十分方便,一個最簡單的代碼段只需要2-3行代碼就行。

點擊(此處)摺疊或打開

url = ‘http // www . pythonscraping . com/’

req = requests.get(url)

print(req.text)

tree = html.fromstring(req.text)

print(tree.xpath(“//h1[@class=’title’]/text()”))

上面的代碼段起作用的也就3行(2,4,5)代碼就獲取到我們想要的內容。當然還要導入一系列的包,比如說requests、lxml、html等。當然由於http//是英文網站,不存在中文亂碼問題。

1.2 麻煩的開始

本來當時的想法是寫一些基礎模塊,方便之後開發的時候調用,減少重複性工作。為了保證代碼在任何情況下都不會出現bug,所以想着用同樣的代碼爬取中文網站獲取裏面的文字

修改上面代碼中的兩行代碼:

點擊(此處)摺疊或打開

url = ‘http : // sports . sina . com . cn/g/premierleague/index.shtml’

print(tree.xpath(“//span[@class=’sec_blk_title’]/text()”))

運行程序可以發現,在語句print(req.text)輸出的內容中,中文字體已經是亂碼了。最後的結果輸出是[‘?????©è§\x86é?\x91’, ‘??\x80?\x9c\x9f?\x9b\x9eé??’]

2 亂碼解決辦法

2.1 試錯

由於之前爬取csdn上一個網頁沒有出現亂碼問題,但是在sina體育網站上出現了亂碼,所以當時以為不是編碼問題,以為是文檔壓縮問題。因為csdn獲取的頁面header里沒有「Content-Encodings」屬性,但是sina體育獲取的頁面header有「Content-Encodings」屬性–「Content-Encoding: gzip」。

2.2 亂碼終極解決辦法

後來查閱官方文檔中response-content相關內容,說明了Requests會自動解碼來自服務器的內容。Requests會基於HTTP頭部對響應的編碼作出有根據的推測,前提是響應文檔的HTTP headers裏面沒有相關字符集說明。官方文檔還說明了,如果你創建了自己的編碼,並使用codecs 模塊進行註冊,你就可以輕鬆地使用這個解碼器名稱作為 r.encoding 的值, 然後由Requests來為你處理編碼。(自己沒有使用codecs模塊,所以這裡不貼代碼了,不過按官方的說法使用codecs模塊是最簡單的一種方式。)

另一份官方文檔片段明確說了reponse編碼處理方式:

Requests遵循RFC標準,編碼使用ISO-8859-1 。

只有當HTTP頭部不存在明確指定的字符集,並且 Content-Type 頭部字段包含 text 值之時, Requests才不去猜測編碼方式。

現在直接上實驗結果,在原始代碼中添加以下代碼片段:

點擊(此處)摺疊或打開

print(req.headers[‘content-type’])

print(req.encoding)

print(req.apparent_encoding)

print(requests.utils.get_encodings_from_content(page_content.text))

輸出結果分別是:

text/html

ISO-8859-1#response內容的編碼

utf-8#response headers里設置的編碼

[‘utf-8’]#response返回的html header標籤里設置的編碼

返回的內容是採用『ISO-8859-1』,所以出現了亂碼,而實際上我們應該採用『utf-8』編碼

總結:當response編碼是『ISO-8859-1』,我們應該首先查找response header設置的編碼;如果此編碼不存在,查看返回的Html的header設置的編碼,代碼如下:

點擊(此處)摺疊或打開

if req.encoding == ‘ISO-8859-1’:

encodings = requests.utils.get_encodings_from_content(req.text)

if encodings:

encoding = encodings[0]

else:

encoding = req.apparent_encoding

encode_content = req.content.decode(encoding, ‘replace’).encode(‘utf-8’, ‘replace’)

python爬蟲抓下來的網頁,中間的中文亂碼怎麼解決

對於python的中文編碼問題可以參考下面的帖子

同時,對於網頁的中文亂碼,建立使用requests模塊代替urllib\urllib2

requests的content方法,對中文編碼,支持比較好,基本不會出現亂碼。

req=requests.get(url,cookies=mecookies)

print req.content

具體用法,參見下面兩個帖子,較詳細:

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/233585.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-11 17:09
下一篇 2024-12-11 17:09

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29

發表回復

登錄後才能評論