為什麼爬蟲提取的文字是亂碼,爬蟲出現亂碼

本文目錄一覽:

為什麼python寫的爬蟲有時候抓取的數據是亂碼

1. 使用chrome瀏覽器,打開示例頁面

2. 在帖子標題處,右鍵選擇”審查元素”,可以看到標題的源代碼

3. 進行簡單的分析,我們需要獲取的是title後面的內容,根據頁面實際內容,我們編寫相應的正則表達式:

title_re=re.compile(‘h1 class=”core_title_txt ” title=”(.*?)”‘)

4. 同理,我們對帖子內容進行”審查元素”,得到內容的源代碼

5. 編寫相應的正則表達式如下:

content_re=re.compile(‘div id=”post_content_\d*” class=”d_post_content j_d_post_content “(.*?)/div’)

6. 這樣通過urllib2打開頁面後,使用上述的正則表達式進行匹配,再對標題和文本內容進行相應的處理即可

為什麼Python寫的爬蟲有時候抓取的數據是亂碼

為什麼Python寫的爬蟲有時候抓取的數據是亂碼

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

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

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

xml takes all the pain out of XML. Stephan Richter lxml是Python語言里和XML以及HTML工作的功能最豐富和最容易使用的庫

求Python大佬解決爬蟲亂碼

一般亂碼問題有可能是以下幾種原因導致:

1、編解碼方式不對(GKB、UTF8等等,或是乾脆用到的編碼不支持爬到的文字內容)

2、加解密問題,現在很多平台都有加解密的機制,沒有正確方式解密的話,也會出現亂碼

3、其他問題,建議具體問題具體分析

可以根據實際的情況具體分析~

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

1. 遇到的中文亂碼問題

1.1 簡單的開始

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

點擊(此處)摺疊或打開

url = ‘http//’

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 = ”

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爬蟲出現菱形問號亂碼的解決方法

在windows下使用非idle的其他ide編輯器,會碰到這個問題。對抓取到的網頁內容進行先解碼再編碼即可。

以requests為例:

r = r.content.decode(‘gbk’).encode(‘utf-8’)

出現編碼問題時,

1.仔細分析錯誤的類型。

看是decode(解碼)錯誤還是encode(轉碼)錯誤。

2.搞清自己處理的字符串是什麼類型的。

一般看網頁的charset,一般為gbk,gb2312或gb18030.其中包含字符的大小為gb2312 gbk gb18030。一般出現『gbk』 codec can』t decode,是因為

(1)要處理的字符串本身不是gbk編碼,但是你卻以gbk編碼去解碼

比如,字符串本身是utf-8的,但是你卻用gbk去解碼utf-8的字符串,所以結果不用說,則必然出錯。

(2)處理的字符的確是gbk的,但是其中夾雜的部分特殊字符,是gbk編碼中所沒有的

如果有些特殊字符是GB18030中有的,但是是gbk中沒有的。

則用gbk去解碼,去所不支持的字符,也比如會出錯。

所以,此種情況,可以嘗試用和當前編碼(gbk)所兼容的但所包含字符更多的編碼(gb18030)去解碼,或許就可以了。

3.然後換用這種的字符編碼去編碼或解碼。

詳情鏈接:

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

有多種情況,一種是html壓縮了,網上查一下Gzip

第二種是你的編碼部隊,看html文件的head改一下就可以了

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

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

相關推薦

  • Python爬蟲可以爬哪些網站

    Python是被廣泛運用於數據處理和分析領域的編程語言之一。它具有易用性、靈活性和成本效益高等特點,因此越來越多的人開始使用它進行網站爬取。本文將從多個方面詳細闡述,Python爬…

    編程 2025-04-29
  • Python飛機大戰中文字資源分析

    Python飛機大戰是一款經典的飛行射擊遊戲,在遊戲過程中,玩家需要控制一架飛機不斷消滅敵人,生存到最後。該遊戲使用Python語言編寫,其中涉及到的文字資源對遊戲的整體體驗有重要…

    編程 2025-04-29
  • Python zipfile解壓文件亂碼處理

    本文主要介紹如何在Python中使用zipfile進行文件解壓的處理,同時詳細討論在解壓文件時可能出現的亂碼問題的各種解決辦法。 一、zipfile解壓文件亂碼問題的根本原因 在P…

    編程 2025-04-29
  • 爬蟲是一種程序

    爬蟲是一種程序,用於自動獲取互聯網上的信息。本文將從如下多個方面對爬蟲的意義、運行方式、應用場景和技術要點等進行詳細的闡述。 一、爬蟲的意義 1、獲取信息:爬蟲可以自動獲取互聯網上…

    編程 2025-04-29
  • 使用Selenium爬蟲實現數據採集

    本文將詳細闡述如何使用Selenium爬蟲實現數據採集,包括Selenium的基本用法,Selenium + Beautiful Soup庫的用法以及常見問題的解決方案。如果您是初…

    編程 2025-04-29
  • Python爬蟲亂碼問題

    在網絡爬蟲中,經常會遇到中文亂碼問題。雖然Python自帶了編碼轉換功能,但有時候會出現一些比較奇怪的情況。本文章將從多個方面對Python爬蟲亂碼問題進行詳細的闡述,並給出對應的…

    編程 2025-04-29
  • Python3亂碼轉中文

    本文將詳細介紹如何轉換Python3中的亂碼為中文字符,幫助Python3開發工程師更好的處理中文字符的問題。 一、Python3中文亂碼的原因 在Python3中,中文字符使用的…

    編程 2025-04-29
  • Python如何打出精美文字

    Python作為一種高級編程語言,擁有廣泛的應用領域。其中最常見的一項應用就是文字處理。Python可以幫助我們打出各種類型的文字,從簡單的文本到複雜的圖形和音頻文件都不在話下。 …

    編程 2025-04-28
  • Python爬蟲文檔報告

    本文將從多個方面介紹Python爬蟲文檔的相關內容,包括:爬蟲基礎知識、爬蟲框架及常用庫、爬蟲實戰等。 一、爬蟲基礎知識 1、爬蟲的定義: 爬蟲是一種自動化程序,通過模擬人的行為在…

    編程 2025-04-28
  • Python定位文字的實現方法

    本文將從多個方面對Python定位文字進行詳細的闡述,包括字符串匹配、正則表達式和第三方庫等方面。 一、字符串匹配 字符串匹配是最基礎的Python定位文字方法,適用於簡單的字符串…

    編程 2025-04-28

發表回復

登錄後才能評論