Ⅰ python爬蟲抓取到的數據用網頁打開時是亂碼,怎麼解決
寫爬蟲是經常會遇到這樣的問題,這種問題很顯然是編碼問題,解決的方法其實也不難。
你可以用下面的兩個方法來解決你的編碼問題:
第一種是,通過瀏覽器打開你寫的html之後,找到瀏覽器中的文字編碼修改,將編碼改為Unicode編碼,即可修復。
第二種方法是修改你的前端代碼:在你的代碼output_html方法中,規定網頁的文字編碼即可
Ⅱ PYTHON獲取網頁源碼亂碼,怎麼辦
text 是系統自行解碼,部分網頁會不對。
content指定解碼,你的網頁是utf-8的,對應解碼就可以了
Ⅲ 用python抓取的網頁保存後為什麼亂碼
從你給的代碼來是Python2。我下面給一個基於Python3的代碼,可以參考一下:
romurllib.requestimporturlopen;
fromurllib.parseimportquote;
rawtext=urlopen('http://www.ccnu.e.cn',timeout=15).read();
print(rawtext)
rawtext=rawtext.decode('gbk')
print(rawtext)
f=open('ccnu.txt','w',encoding='utf8');
f.write(rawtext)
大概的原理是,在Python3下面,抓取到的頁面默認是byte類型的(通過第4行輸出的結果就可以看出來),我們需要根據網頁的實際編碼進行處理。本例中給的網頁使用的是gb2312。所以,我要先以gbk的格式進行解碼(gbk包含了gb2312,能夠表示更多的漢語字元),解碼後實際上得到的就是unicode碼了,由於我的控制台編碼設置的是utf8,在列印時系統會自動將字元串從unicode轉為utf8,所以第6行控制台列印結果正常;第7行寫入文件時也要指定文件的編碼格式,我這里選擇的是utf8,當然用gbk也是一切正常的,因為這個編碼設置的是保存文件的編碼,而不是原來那個網頁內容的編碼了。字元串編碼和文件編碼不是一回事。打開ccnu.txt發現無亂碼。
Python2的代碼我不熟。
建議你也在代碼中添加print 看控制輸出是否正常。如果控制台輸出正常,則有可能是在保存頁面文件時,沒有正確指定內容字元串的encode格式。或者把所有gb2312換為gbk再試試。
反正Python2下面極容易出現漢字亂碼,如果能理解編碼encode和解碼decode的含義,了解Python2的字元串處理過程,就可以避免這些問題。
Ⅳ python 抓取的網頁鏈接,鏈接中的中文亂碼問題
應該是shell的編碼和listinfo編碼不一樣導致的,部分正常,部分亂碼有可能是因為兩種編碼部分字元恰好一樣。
試試
importsys
printi[i].encode(sys.getdefaultencoding())
Ⅳ 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/