當前位置:首頁 » 編程語言 » python抓取網頁亂碼

python抓取網頁亂碼

發布時間: 2022-12-22 10:28:57

1. 用python抓取編碼為gb2312的網頁,結果抓取的都是亂碼 怎樣才能將它弄成正常的HTML格式

你試試下面的代碼

#!/usr/bin/envpython
#-*-coding:utf8-*-

importurllib2

req=urllib2.Request("http://www..com/")
res=urllib2.urlopen(req)
html=res.read()
res.close()

html=unicode(html,"gb2312").encode("utf8")
printhtml

2. 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//www.pythonscraping.com/是英文網站,不存在中文亂碼問題。

  • 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?x9cx9f?x9bx9eé??']

  • 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')

3. 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.然後換用這種的字元編碼去編碼或解碼。

詳情鏈接:https://www.crifan.com/summary_python_unicodedecode_error_possible_reasons_and_solutions/

4. python 抓取的網頁鏈接,鏈接中的中文亂碼問題

應該是shell的編碼和listinfo編碼不一樣導致的,部分正常,部分亂碼有可能是因為兩種編碼部分字元恰好一樣。


試試

importsys
printi[i].encode(sys.getdefaultencoding())

5. python response 中文亂碼問題

獲得response.text有如下類似的亂碼:

解決方法有兩種:
第一種:

apparent_encoding方法是requests庫利用chardet對位元組流編碼進行了猜測。一般來說使用這種方法,大部分網頁的中文亂碼都會恢復。如果還是不行,那就試試第二種方法。
第二種:

從網頁格式中獲得網頁內容的編碼方式(一般content-type欄位會出現在HTML的header的頭幾行)。
如果直接拿來用,會報錯

所以需要給decode加上第二個參數,decode([encoding], [errors='strict']), 第二個參數設置為ignore,則會忽略非法字元。

這樣就能獲得正確的中文內容了。

練習網址 https://news.mydrivers.com/1/628/628585.htm

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

對於python的中文編碼問題可以參考下面的帖子
http://python.jobbole.com/85482/

同時,對於網頁的中文亂碼,建立使用requests模塊代替urllib\urllib2
requests的content方法,對中文編碼,支持比較好,基本不會出現亂碼。
req=requests.get(url,cookies=mecookies)
print req.content

具體用法,參見下面兩個帖子,較詳細:
http://blog.csdn.net/iloveyin/article/details/21444613
http://blog.csdn.net/alpha5/article/details/24964009

7. 求Python大佬解決爬蟲亂碼

一般亂碼問題有可能是以下幾種原因導致:
1、編解碼方式不對(GKB、UTF8等等,或是乾脆用到的編碼不支持爬到的文字內容)
2、加解密問題,現在很多平台都有加解密的機制,沒有正確方式解密的話,也會出現亂碼
3、其他問題,建議具體問題具體分析
可以根據實際的情況具體分析~

8. PYTHON獲取網頁源碼亂碼,怎麼辦

text 是系統自行解碼,部分網頁會不對。

content指定解碼,你的網頁是utf-8的,對應解碼就可以了

熱點內容
不用internet打開ftp 發布:2025-05-15 23:06:00 瀏覽:152
sql字元串取數字 發布:2025-05-15 22:57:45 瀏覽:124
推薦編程課 發布:2025-05-15 22:34:12 瀏覽:618
表拒絕訪問 發布:2025-05-15 22:29:37 瀏覽:978
電腦怎樣解壓文件 發布:2025-05-15 22:25:32 瀏覽:439
dns伺服器怎麼看 發布:2025-05-15 22:17:27 瀏覽:151
3dm的壓縮包 發布:2025-05-15 22:09:23 瀏覽:662
和存儲字長 發布:2025-05-15 21:54:09 瀏覽:515
用什麼寫c語言 發布:2025-05-15 21:35:56 瀏覽:418
linux讀取u盤 發布:2025-05-15 21:32:13 瀏覽:508