欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python網(wǎng)絡(luò)爬蟲(chóng)出現(xiàn)亂碼問(wèn)題的解決方法

 更新時(shí)間:2017年01月05日 08:53:54   作者:apple9005  
這篇文章主要為大家詳細(xì)介紹了Python網(wǎng)絡(luò)爬蟲(chóng)出現(xiàn)亂碼問(wèn)題的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

關(guān)于爬蟲(chóng)亂碼有很多各式各樣的問(wèn)題,這里不僅是中文亂碼,編碼轉(zhuǎn)換、還包括一些如日文、韓文 、俄文、藏文之類(lèi)的亂碼處理,因?yàn)榻鉀Q方式是一致的,故在此統(tǒng)一說(shuō)明。

網(wǎng)絡(luò)爬蟲(chóng)出現(xiàn)亂碼的原因

源網(wǎng)頁(yè)編碼和爬取下來(lái)后的編碼格式不一致。
如源網(wǎng)頁(yè)為gbk編碼的字節(jié)流,而我們抓取下后程序直接使用utf-8進(jìn)行編碼并輸出到存儲(chǔ)文件中,這必然會(huì)引起亂碼 即當(dāng)源網(wǎng)頁(yè)編碼和抓取下來(lái)后程序直接使用處理編碼一致時(shí),則不會(huì)出現(xiàn)亂碼; 此時(shí)再進(jìn)行統(tǒng)一的字符編碼也就不會(huì)出現(xiàn)亂碼了

注意區(qū)分

  • 源網(wǎng)編碼A、
  • 程序直接使用的編碼B、
  • 統(tǒng)一轉(zhuǎn)換字符的編碼C。

亂碼的解決方法

確定源網(wǎng)頁(yè)的編碼A,編碼A往往在網(wǎng)頁(yè)中的三個(gè)位置

1.http header的Content-Type
獲取服務(wù)器 header 的站點(diǎn)可以通過(guò)它來(lái)告知瀏覽器一些頁(yè)面內(nèi)容的相關(guān)信息。 Content-Type 這一條目的寫(xiě)法就是 "text/html; charset=utf-8"。

2.meta charset

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

3.網(wǎng)頁(yè)頭中Document定義

<script type="text/javascript"> 
if(document.charset){ 
 alert(document.charset+"!!!!"); 
 document.charset = 'GBK'; 
 alert(document.charset); 
} 
else if(document.characterSet){ 
 alert(document.characterSet+"????"); 
 document.characterSet = 'GBK'; 
 alert(document.characterSet); 
} 

在獲取源網(wǎng)頁(yè)編碼時(shí),依次判斷下這三部分?jǐn)?shù)據(jù)即可,從前往后,優(yōu)先級(jí)亦是如此。
以上三者中均沒(méi)有編碼信息 一般采用chardet等第三方網(wǎng)頁(yè)編碼智能識(shí)別工具來(lái)做

安裝: pip install chardet

官方網(wǎng)站: http://chardet.readthedocs.io/en/latest/usage.html

Python chardet 字符編碼判斷

使用 chardet 可以很方便的實(shí)現(xiàn)字符串/文件的編碼檢測(cè) 雖然HTML頁(yè)面有charset標(biāo)簽,但是有些時(shí)候是不對(duì)的。那么chardet就能幫我們大忙了。
chardet實(shí)例

import urllib 
rawdata = urllib.urlopen('http://www.dbjr.com.cn/').read() 
import chardet 
chardet.detect(rawdata) 
{'confidence': 0.99, 'encoding': 'GB2312'} 

chardet可以直接用detect函數(shù)來(lái)檢測(cè)所給字符的編碼。函數(shù)返回值為字典,有2個(gè)元素,一個(gè)是檢測(cè)的可信度,另外一個(gè)就是檢測(cè)到的編碼。

在開(kāi)發(fā)自用爬蟲(chóng)過(guò)程中如何處理漢字編碼?
下面所說(shuō)的都是針對(duì)python2.7,如果不加處理,采集到的都是亂碼,解決的方法是將html處理成統(tǒng)一的utf-8編碼 遇到windows-1252編碼,屬于chardet編碼識(shí)別訓(xùn)練未完成

import chardet 
a='abc' 
type(a) 
str 
chardet.detect(a) 
{'confidence': 1.0, 'encoding': 'ascii'} 
 
 
a ="我" 
chardet.detect(a) 
{'confidence': 0.73, 'encoding': 'windows-1252'} 
a.decode('windows-1252') 
u'\xe6\u02c6\u2018' 
chardet.detect(a.decode('windows-1252').encode('utf-8')) 
type(a.decode('windows-1252')) 
unicode 
type(a.decode('windows-1252').encode('utf-8')) 
str 
chardet.detect(a.decode('windows-1252').encode('utf-8')) 
{'confidence': 0.87625, 'encoding': 'utf-8'} 
 
 
a ="我是中國(guó)人" 
type(a) 
str 
{'confidence': 0.9690625, 'encoding': 'utf-8'} 
chardet.detect(a) 
# -*- coding:utf-8 -*- 
import chardet 
import urllib2 
#抓取網(wǎng)頁(yè)html 
html = urllib2.urlopen('http://www.dbjr.com.cn/').read() 
print html 
mychar=chardet.detect(html) 
print mychar 
bianma=mychar['encoding'] 
if bianma == 'utf-8' or bianma == 'UTF-8': 
 html=html.decode('utf-8','ignore').encode('utf-8') 
else: 
 html =html.decode('gb2312','ignore').encode('utf-8') 
print html 
print chardet.detect(html) 

python代碼文件的編碼
py文件默認(rèn)是ASCII編碼,中文在顯示時(shí)會(huì)做一個(gè)ASCII到系統(tǒng)默認(rèn)編碼的轉(zhuǎn)換,這時(shí)就會(huì)出錯(cuò):SyntaxError: Non-ASCII character。需要在代碼文件的第一行添加編碼指示:

# -*- coding:utf-8 -*- 
 
print '中文' 

像上面那樣直接輸入的字符串是按照代碼文件的編碼'utf-8'來(lái)處理的
如果用unicode編碼,以下方式:

s1 = u'中文' #u表示用unicode編碼方式儲(chǔ)存信息

decode是任何字符串具有的方法,將字符串轉(zhuǎn)換成unicode格式,參數(shù)指示源字符串的編碼格式。
encode也是任何字符串具有的方法,將字符串轉(zhuǎn)換成參數(shù)指定的格式。

更多內(nèi)容請(qǐng)參考專(zhuān)題《python爬取功能匯總》進(jìn)行學(xué)習(xí)。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python沒(méi)有g(shù)pu,如何改用cpu跑代碼

    python沒(méi)有g(shù)pu,如何改用cpu跑代碼

    這篇文章主要介紹了python沒(méi)有g(shù)pu,如何改用cpu跑代碼?今天小編就為大家分享一下解決方案。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python3 入門(mén)教程 簡(jiǎn)單但比較不錯(cuò)

    Python3 入門(mén)教程 簡(jiǎn)單但比較不錯(cuò)

    Python已經(jīng)是3.1版本了,與時(shí)俱進(jìn)更新教程.2.5或2.6請(qǐng)看上一篇文章。
    2009-11-11
  • python文件操作的簡(jiǎn)單方法總結(jié)

    python文件操作的簡(jiǎn)單方法總結(jié)

    在本篇文章里小編給大家整理的是關(guān)于python文件操作的簡(jiǎn)單方法知識(shí)點(diǎn),有需要的朋友們可以學(xué)習(xí)下。
    2019-11-11
  • python面積圖之曲線圖的填充

    python面積圖之曲線圖的填充

    這篇文章主要介紹了python面積圖之曲線圖的填充,文章圍繞主題的相關(guān)資料展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助
    2022-06-06
  • Python繪制莖葉圖的示例代碼

    Python繪制莖葉圖的示例代碼

    這篇文章主要為大家信息介紹了Python繪制莖葉圖的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • tensorflow使用神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)mnist分類(lèi)

    tensorflow使用神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)mnist分類(lèi)

    這篇文章主要為大家詳細(xì)介紹了tensorflow使用神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)mnist分類(lèi),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • 基于matplotlib xticks用法詳解

    基于matplotlib xticks用法詳解

    這篇文章主要介紹了基于matplotlib xticks用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • 解讀python中的類(lèi)型提示(type hint)

    解讀python中的類(lèi)型提示(type hint)

    這篇文章主要介紹了解讀python中的類(lèi)型提示(type hint),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Python正則表達(dá)式re.search()用法詳解

    Python正則表達(dá)式re.search()用法詳解

    re是Python中最常見(jiàn)的正則表達(dá)式模塊,常用方法包括compile,match,findall,finditer,search,split,sub等,下面這篇文章主要給大家介紹了關(guān)于Python正則表達(dá)式re.search()用法詳解的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • Python字符串格式化常用手段及注意事項(xiàng)

    Python字符串格式化常用手段及注意事項(xiàng)

    這篇文章主要介紹了Python字符串格式化常用手段,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06

最新評(píng)論