最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

關(guān)于爬蟲亂碼有很多各式各樣的問題,這里不僅是中文亂碼,編碼轉(zhuǎn)換、還包括一些如日文、韓文 、俄文、藏文之類的亂碼處理,因為解決方式是一致的,故在此統(tǒng)一說明。

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

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

注意區(qū)分

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

亂碼的解決方法

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

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

2.meta charset

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

3.網(wǎng)頁頭中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)頁編碼時,依次判斷下這三部分?jǐn)?shù)據(jù)即可,從前往后,優(yōu)先級亦是如此。
以上三者中均沒有編碼信息 一般采用chardet等第三方網(wǎng)頁編碼智能識別工具來做

安裝: pip install chardet

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

Python chardet 字符編碼判斷

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

import urllib 
rawdata = urllib.urlopen('http://m.fzitv.net/').read() 
import chardet 
chardet.detect(rawdata) 
{'confidence': 0.99, 'encoding': 'GB2312'} 

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

在開發(fā)自用爬蟲過程中如何處理漢字編碼?
下面所說的都是針對python2.7,如果不加處理,采集到的都是亂碼,解決的方法是將html處理成統(tǒng)一的utf-8編碼 遇到windows-1252編碼,屬于chardet編碼識別訓(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 ="我是中國人" 
type(a) 
str 
{'confidence': 0.9690625, 'encoding': 'utf-8'} 
chardet.detect(a) 
# -*- coding:utf-8 -*- 
import chardet 
import urllib2 
#抓取網(wǎng)頁html 
html = urllib2.urlopen('http://m.fzitv.net/').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編碼,中文在顯示時會做一個ASCII到系統(tǒng)默認(rèn)編碼的轉(zhuǎn)換,這時就會出錯:SyntaxError: Non-ASCII character。需要在代碼文件的第一行添加編碼指示:

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

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

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

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

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

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

相關(guān)文章

  • Python tkinter實現(xiàn)春節(jié)煙花效果demo

    Python tkinter實現(xiàn)春節(jié)煙花效果demo

    這篇文章主要為大家介紹了Python實現(xiàn)春節(jié)煙花效果demo,本文為大家提供了兩種實現(xiàn)方式代碼,詳細(xì)的實現(xiàn)一場浪漫的煙花秀,有需要的朋友可以借鑒參考下
    2024-01-01
  • 離線安裝Pyecharts的步驟以及依賴包流程

    離線安裝Pyecharts的步驟以及依賴包流程

    這篇文章主要介紹了離線安裝Pyecharts的步驟以及依賴包流程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-03-03
  • Python不要再使用while死循環(huán),定時器代替效果更佳

    Python不要再使用while死循環(huán),定時器代替效果更佳

    在python開發(fā)的過程中,經(jīng)常見到小伙伴直接使用while True的死循環(huán)+sleep的方式來保存程序的一直運(yùn)行。這種方式雖然能達(dá)到效果,但是說不定什么時候就直接崩潰了,其實使用定時器效果也不錯哦
    2023-03-03
  • Django后臺獲取前端post上傳的文件方法

    Django后臺獲取前端post上傳的文件方法

    今天小編就為大家分享一篇Django后臺獲取前端post上傳的文件方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Python Sympy計算梯度、散度和旋度的實例

    Python Sympy計算梯度、散度和旋度的實例

    今天小編就為大家分享一篇Python Sympy計算梯度、散度和旋度的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • python3使用matplotlib繪制散點圖

    python3使用matplotlib繪制散點圖

    這篇文章主要為大家詳細(xì)介紹了python3使用matplotlib繪制散點圖,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • python利用opencv如何實現(xiàn)答題卡自動判卷

    python利用opencv如何實現(xiàn)答題卡自動判卷

    由于工作需要,最近在研究關(guān)于如何通過程序識別答題卡的客觀題的答案,所以下面這篇文章主要介紹了python利用opencv如何實現(xiàn)答題卡自動判卷的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • Pandas多級索引的實現(xiàn)示例

    Pandas多級索引的實現(xiàn)示例

    Pandas 中的多級索引是一種強(qiáng)大的工具,用于處理具有多個維度或?qū)哟蔚臄?shù)據(jù),本文主要介紹了Pandas多級索引的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • python join方法使用詳解

    python join方法使用詳解

    這篇文章主要介紹了python join方法使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • python命令行交互引導(dǎo)用戶選擇寵物實現(xiàn)

    python命令行交互引導(dǎo)用戶選擇寵物實現(xiàn)

    這篇文章主要為大家介紹了python命令行交互引導(dǎo)用戶選擇寵物實現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11

最新評論

清水河县| 澄迈县| 万宁市| 习水县| 徐州市| 祁阳县| 巩留县| 溧水县| 岳阳县| 开阳县| 德钦县| 襄垣县| 静乐县| 闽清县| 海门市| 桐乡市| 时尚| 卓资县| 延寿县| 遂川县| 新兴县| 凯里市| 秀山| 涡阳县| 鄂尔多斯市| 遂昌县| 赣州市| 普兰店市| 神池县| 富源县| 夏津县| 洛川县| 北海市| 华安县| 宜川县| 内乡县| 买车| 云龙县| 安吉县| 张掖市| 遂溪县|