丝袜人妻一区二区三区_少妇福利无码视频_亚洲理论片在线观看_一级毛片国产A级片

當(dāng)前位置:首頁 > 旅游指南

亂碼怎么辦 淺入深出 | 網(wǎng)站爬取時出現(xiàn)亂碼該怎么辦

最近有粉絲找我咨詢。在抓取網(wǎng)站時,網(wǎng)頁的源代碼看起來像是中文亂碼。之前有很多粉絲對亂碼爬蟲的各種質(zhì)疑。今天總結(jié)一下web爬蟲的亂碼處理。注意這里不僅僅是中文亂碼,還有一些日文、韓文、俄文、藏文等亂碼。,因?yàn)樗鼈兊慕馐且粯拥?,所以在這里統(tǒng)一解釋。

第一,亂碼問題的出現(xiàn)

以爬行51job網(wǎng)站為例,談?wù)劄槭裁磿霈F(xiàn)“亂碼”,如何解決,以及背后的機(jī)制。

代碼示例:

import requestsurl = "http://search.51job.com"res = requests.get(url)print(res.text)

顯示結(jié)果:

可以發(fā)現(xiàn)Requests推測的文本編碼(即網(wǎng)頁返回或爬下后的編碼轉(zhuǎn)換)與源網(wǎng)頁編碼不一致,是導(dǎo)致代碼亂碼的原因。

二、亂碼背后的神秘

當(dāng)源網(wǎng)頁編碼與抓取后的代碼轉(zhuǎn)換不一致時,比如源網(wǎng)頁是gbk編碼的字節(jié)流,程序抓取后直接使用utf-8編碼輸出到存儲文件,必然會造成亂碼,即當(dāng)源網(wǎng)頁編碼與程序抓取后直接使用的代碼一致時,就不會出現(xiàn)亂碼,統(tǒng)一字符編碼時也不會出現(xiàn)亂碼。無論什么編碼格式,所有抓取的網(wǎng)頁都轉(zhuǎn)換成utf-8格式存儲。

注意:區(qū)分源網(wǎng)絡(luò)代碼A-gbk,程序直接使用的代碼B-ISO-8859-1,統(tǒng)一轉(zhuǎn)換字符的代碼C-utf-8。

在這里,我們將擴(kuò)展unicode、ISO-8859-1、gbk2312、gbk、utf-8等之間的區(qū)別。,大致如下:

最早的編碼是iso8859-1,類似于ascii編碼。然而,為了方便地表達(dá)各種語言,許多標(biāo)準(zhǔn)代碼逐漸出現(xiàn)。Iso8859-1屬于單字節(jié)編碼,能表達(dá)的字符最大范圍為0-255,應(yīng)用于英文系列。顯然iso8859-1編碼的字符范圍比較窄,不能代表漢字。

1981年,中國人通過對中文ASCII碼的擴(kuò)展和轉(zhuǎn)換,產(chǎn)生了GB2312碼,可以代表6000多個常用漢字。但是漢字太多了,包括繁體字和各種各樣的字,于是產(chǎn)生了GBK碼,其中包括了GB2312中的碼,擴(kuò)展了很多。中國也是一個多民族國家,幾乎所有的民族都有自己獨(dú)立的語言體系。為了表達(dá)這些字符,我們繼續(xù)將GBK代碼擴(kuò)展到GB18030代碼。每個國家和中國一樣,都有自己的語言編碼,所以有各種各樣的代碼。如果不安裝相應(yīng)的代碼,就無法解釋相應(yīng)的代碼想要表達(dá)什么。最后,一個叫ISO的組織再也受不了了。他們一起創(chuàng)建了一個UNICODE代碼,它非常大,可以容納世界上任何單詞和符號。所以只要電腦上有UNICODE編碼系統(tǒng),不管世界上是什么樣的字符,只需要保存文件,保存為UNICODE代碼,其他電腦就可以正常解釋。UNICODE在網(wǎng)絡(luò)傳輸中,有兩種標(biāo)準(zhǔn)UTF-8和UTF-16,分別傳輸8位和16位。那么有人會問,既然UTF-8能保存這么多字符和符號,為什么中國還有這么多人用GBK等代碼?因?yàn)閁TF-8等碼比較大,占電腦數(shù)量很大空,如果大部分用戶是中國人,用GBK等碼也可以。

也可以這樣理解:字符串由字符組成,字符以二進(jìn)制形式存儲在計(jì)算機(jī)硬件中,這就是代碼。如果直接使用“字符串的二進(jìn)制表示(編碼)”,會增加不同類型編碼之間轉(zhuǎn)換的復(fù)雜度。所以引入了一個抽象層,“獨(dú)立于存儲的字符串的二進(jìn)制表示(編碼)”,使得字符可以以一種獨(dú)立于存儲的形式表達(dá),不同的編碼可以先轉(zhuǎn)換到這個抽象層,再轉(zhuǎn)換到其他編碼形式。這里,unicode是“獨(dú)立于存儲的表示”,UTF-8是“二進(jìn)制表示”。

第三,亂碼的解決方案

根據(jù)原因找到解決辦法很簡單。

方法1:直接指定res.encoding

import requestsurl = "http://search.51job.com"res = requests.get(url)res.encoding = "gbk"html = res.textprint(html)

方法2:通過res .表觀編碼屬性指定

import requestsurl = "http://search.51job.com"res = requests.get(url)res.encoding = res.apparent_encodinghtml = res.textprint(html)

方法3:通過編碼和解碼

import requestsurl = "http://search.51job.com"res = requests.get(url)html = res.text.encode('iso-8859-1').decode('gbk')print(html)

輸出結(jié)果:

基本思路由三個步驟組成:確定源網(wǎng)頁編碼A - gbk,程序通過編碼B-ISO-8859-1還原源網(wǎng)頁數(shù)據(jù),統(tǒng)一轉(zhuǎn)換字符編碼C-utf-8。至于為什么有統(tǒng)一的轉(zhuǎn)碼步驟?網(wǎng)絡(luò)爬蟲系統(tǒng)中有很多數(shù)據(jù)源。如果無法使用數(shù)據(jù),它將被轉(zhuǎn)換為其原始數(shù)據(jù),如果這樣做是浪費(fèi)的。所以一般爬蟲系統(tǒng)要對抓取的結(jié)果進(jìn)行統(tǒng)一編碼,做到一致,使用方便。

比如我們要說網(wǎng)頁數(shù)據(jù)保存了,會轉(zhuǎn)換成utf-8,代碼如下:

with open("a.txt",'w',encoding='utf-8') as f:f.write(html)

四.總結(jié)

對于web爬蟲的亂碼,本文不僅給出了解決方案,還深入探討了其原理,引出了很多有趣的問題,比如,utf-8、gbk、gb2312的編碼方式是什么?為什么這種轉(zhuǎn)化可以解決問題?

最后,多動腦筋,多思考,多總結(jié),給每一個碼農(nóng)!

本文轉(zhuǎn)自公眾號:戀習(xí)Python(ID:sldata2017)本文版權(quán)歸原作者所有,內(nèi)容為作者個人觀點(diǎn),轉(zhuǎn)載目的在于傳遞更多信息,如涉及作品內(nèi)容、版權(quán)等問題,可聯(lián)系本站刪除,謝謝。

更多交流咨詢:18080942131(帶微信加好友備注:搜狐)。

1.《亂碼怎么辦 淺入深出 | 網(wǎng)站爬取時出現(xiàn)亂碼該怎么辦》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識,僅代表作者本人觀點(diǎn),與本網(wǎng)站無關(guān),侵刪請聯(lián)系頁腳下方聯(lián)系方式。

2.《亂碼怎么辦 淺入深出 | 網(wǎng)站爬取時出現(xiàn)亂碼該怎么辦》僅供讀者參考,本網(wǎng)站未對該內(nèi)容進(jìn)行證實(shí),對其原創(chuàng)性、真實(shí)性、完整性、及時性不作任何保證。

3.文章轉(zhuǎn)載時請保留本站內(nèi)容來源地址,http://f99ss.com/junshi/1041469.html

上一篇

報(bào)名費(fèi)4000元!央視曝劍橋英語考試天價考位黑幕 官方回應(yīng)

下一篇

視睿電子 鴻合科技遭視源股份1.43億元專利訴訟

刪不掉的文件 電腦的殘留文件刪除不了?只要輸入一代碼!不用殺毒軟件就能清理

刪不掉的文件 電腦的殘留文件刪除不了?只要輸入一代碼!不用殺毒軟件就能清理

我相信大多數(shù)用戶在刪除軟件時沒有清理殘留文件。所以在查詢內(nèi)存空的時候,我們會發(fā)現(xiàn)我們的硬盤空被很多未知文件占用了。為了解決這個問題,本文將與大家分享在沒有殺毒軟件的情況下清理電腦殘留文件的教程。  3.然后單擊“文件”并選擇“另存為”  4.“另存為”窗口打開后,輸入“刪除文件殘留”。在“文...

考研幫網(wǎng)頁版 考研生,一根筆,還是一臺電腦方便?

  • 考研幫網(wǎng)頁版 考研生,一根筆,還是一臺電腦方便?
  • 考研幫網(wǎng)頁版 考研生,一根筆,還是一臺電腦方便?
  • 考研幫網(wǎng)頁版 考研生,一根筆,還是一臺電腦方便?
娜美游戲 lol源代碼娜美在哪領(lǐng) 源代碼娜美領(lǐng)取方法介紹

娜美游戲 lol源代碼娜美在哪領(lǐng) 源代碼娜美領(lǐng)取方法介紹

源碼Nami是lol源碼系列中的一款皮膚,特效非常好。最近LOL服務(wù)器波動,官方直接發(fā)玩家皮膚。很多玩家想知道LOL源碼Nami從哪里來。以下小系列帶攻略。來享受加一個吧! 源碼Nami是lol源碼系列中的一款皮膚,特效非常好。最近LOL服務(wù)器波動,官方直接發(fā)玩家皮膚。很多玩家想知道LOL源...

網(wǎng)頁上有錯誤怎么解決 如何優(yōu)雅處理前端異常?

網(wǎng)頁上有錯誤怎么解決 如何優(yōu)雅處理前端異常?

前端一直是離用戶最近的一層。隨著產(chǎn)品的改進(jìn),我們會更加注重用戶體驗(yàn),但是前端異常總是令人討厭。  4.接下來,我們來試試異常網(wǎng)絡(luò)請求: window. = function(message, source, lineno, colno, error) {console.log('捕獲到異...

口袋妖怪漆黑的魅影金手指代碼 《口袋妖怪漆黑的魅影》金手指大全

口袋妖怪漆黑的魅影金手指代碼 《口袋妖怪漆黑的魅影》金手指大全

在口袋妖怪的黑暗魅影里,很多朋友覺得錢不夠,孵蛋太長,等等。這個時候很多朋友都想用金手指解決這些問題,那我們就來看看口袋妖怪的黑暗魅影吧。  [穿墻] C518E2595ADBAF5B [傳送] 020322E4:XXXX(xxxx是位置代碼) [快速升級] 020241F0:2710 【金...

網(wǎng)頁窗口最大化 Google Chrome 最實(shí)用的30個鍵盤快捷鍵

網(wǎng)頁窗口最大化 Google Chrome 最實(shí)用的30個鍵盤快捷鍵

Chrome瀏覽器是外貿(mào)界最常用的瀏覽器之一。熟練使用Chrome瀏覽器高速上網(wǎng),會大大提高你的工作效率。  如果需要跳轉(zhuǎn)到特定頁面,請按下命令鍵并選擇適當(dāng)?shù)臄?shù)字。例如,如果您需要跳轉(zhuǎn)到第七個打開的選項(xiàng)卡,請按下Command鍵并添加數(shù)字7。如果您需要跳回第二個打開的標(biāo)簽,請按下Comman...

在線屏幕尺子 網(wǎng)頁設(shè)計(jì)尺寸

在線屏幕尺子 網(wǎng)頁設(shè)計(jì)尺寸

網(wǎng)頁的設(shè)計(jì)尺寸是多少?我們來看看。  網(wǎng)頁設(shè)計(jì)尺寸 制作網(wǎng)頁時我們選擇的分辨率是72像素/英寸,使用的畫布尺寸是1920px*1080px。但這并不意味著我們可以在整個畫布上畫畫。 網(wǎng)頁主要有兩種布局:左右布局和中心布局。布局不一致,使得可設(shè)計(jì)空不一樣。 左右結(jié)構(gòu)型 1.左右布局,靈活性強(qiáng),...

木馬網(wǎng)站 網(wǎng)頁木馬的免殺

  • 木馬網(wǎng)站 網(wǎng)頁木馬的免殺
  • 木馬網(wǎng)站 網(wǎng)頁木馬的免殺
  • 木馬網(wǎng)站 網(wǎng)頁木馬的免殺