精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

深入淺出理解Python“亂碼”問題

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

 在爬取某網(wǎng)站時(shí),網(wǎng)頁的源代碼出現(xiàn)了中文亂碼問題。之前關(guān)于爬蟲亂碼有各式各樣的問題,今天與大家一起總結(jié)下關(guān)于網(wǎng)絡(luò)爬蟲的亂碼處理。注意,這里不僅是中文亂碼,還包括一些如日文、韓文 、俄文、藏文之類的亂碼處理,因?yàn)樗麄兊慕鉀Q方式 是一致的,故在此統(tǒng)一說明。

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

就以爬取51job網(wǎng)站舉例,講講為何會(huì)出現(xiàn)“亂碼”問題,如何解決它以及其背后的機(jī)制。

代碼示例:

  1. import requests 
  2.  
  3. url = "http://search.51job.com" 
  4. res = requests.get(url) 
  5. print(res.text) 

顯示結(jié)果:

 

打印res.text時(shí),發(fā)現(xiàn)了什么?中文亂碼!!!不過發(fā)現(xiàn),網(wǎng)頁的字符集類型采用的gbk編碼格式。

我們知道Requests 會(huì)基于 HTTP 頭部對(duì)響應(yīng)的編碼作出有根據(jù)的推測(cè)。當(dāng)你訪問 r.text 之時(shí),Requests 會(huì)使用其推測(cè)的文本編碼。你可以找出 Requests 使用了什么編碼,并且能夠使用r.encoding 屬性來改變它。

接下來,我們一起通過resquests的一些用法,來看看Requests 會(huì)基于 HTTP 頭部對(duì)響應(yīng)的編碼方式。

  1. print(res.encoding)  #查看網(wǎng)頁返回的字符集類型 
  2. print(res.apparent_encoding) #自動(dòng)判斷字符集類型 

輸出結(jié)果為:

 

可以發(fā)現(xiàn)Requests 推測(cè)的文本編碼(也就是網(wǎng)頁返回即爬取下來后的編碼轉(zhuǎn)換)與源網(wǎng)頁編碼不一致,由此可知其正是導(dǎo)致亂碼原因。

二、亂碼背后的奧秘

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

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

在此,我們拓展講講unicode、ISO-8859-1、gbk2312、gbk、utf-8等之間的區(qū)別聯(lián)系,大概如下:

最早的編碼是iso8859-1,和ascii編碼相似。但為了方便表示各種各樣的語言,逐漸出現(xiàn)了很多標(biāo)準(zhǔn)編碼。iso8859-1屬于單字節(jié)編碼,最多能表示的字符范圍是0-255,應(yīng)用于英文系列。很明顯,iso8859-1編碼表示的字符范圍很窄,無法表示中文字符。

1981年中國人民通過對(duì) ASCII 編碼的中文擴(kuò)充改造,產(chǎn)生了 GB2312 編碼,可以表示6000多個(gè)常用漢字。但漢字實(shí)在是太多了,包括繁體和各種字符,于是產(chǎn)生了 GBK 編碼,它包括了 GB2312 中的編碼,同時(shí)擴(kuò)充了很多。中國又是個(gè)多民族國家,各個(gè)民族幾乎都有自己獨(dú)立的語言系統(tǒng),為了表示那些字符,繼續(xù)把 GBK 編碼擴(kuò)充為 GB18030 編碼。每個(gè)國家都像中國一樣,把自己的語言編碼,于是出現(xiàn)了各種各樣的編碼,如果你不安裝相應(yīng)的編碼,就無法解釋相應(yīng)編碼想表達(dá)的內(nèi)容。終于,有個(gè)叫 ISO 的組織看不下去了。他們一起創(chuàng)造了一種編碼 UNICODE ,這種編碼非常大,大到可以容納世界上任何一個(gè)文字和標(biāo)志。所以只要電腦上有 UNICODE 這種編碼系統(tǒng),無論是全球哪種文字,只需要保存文件的時(shí)候,保存成 UNICODE 編碼就可以被其他電腦正常解釋。UNICODE 在網(wǎng)絡(luò)傳輸中,出現(xiàn)了兩個(gè)標(biāo)準(zhǔn) UTF-8 和 UTF-16,分別每次傳輸 8個(gè)位和 16個(gè)位。于是就會(huì)有人產(chǎn)生疑問,UTF-8 既然能保存那么多文字、符號(hào),為什么國內(nèi)還有這么多使用 GBK 等編碼的人?因?yàn)?UTF-8 等編碼體積比較大,占電腦空間比較多,如果面向的使用人群絕大部分都是中國人,用 GBK 等編碼也可以。

也可以這樣來理解:字符串是由字符構(gòu)成,字符在計(jì)算機(jī)硬件中通過二進(jìn)制形式存儲(chǔ),這種二進(jìn)制形式就是編碼。如果直接使用 “字符串↔️字符↔️二進(jìn)制表示(編碼)” ,會(huì)增加不同類型編碼之間轉(zhuǎn)換的復(fù)雜性。所以引入了一個(gè)抽象層,“字符串↔️字符↔️與存儲(chǔ)無關(guān)的表示↔️二進(jìn)制表示(編碼)” ,這樣,可以用一種與存儲(chǔ)無關(guān)的形式表示字符,不同的編碼之間轉(zhuǎn)換時(shí)可以先轉(zhuǎn)換到這個(gè)抽象層,然后再轉(zhuǎn)換為其他編碼形式。在這里,unicode 就是 “與存儲(chǔ)無關(guān)的表示”,utf—8 就是 “二進(jìn)制表示”。

三、亂碼的解決方法

根據(jù)原因來找解決方法,就非常簡(jiǎn)單了。

方法一:直接指定res.encoding

  1. import requests 
  2.  
  3. url = "http://search.51job.com" 
  4. res = requests.get(url) 
  5. res.encoding = "gbk" 
  6. html = res.text 
  7. print(html) 

方法二:通過res.apparent_encoding屬性指定

  1. import requests 
  2.  
  3. url = "http://search.51job.com" 
  4. res = requests.get(url) 
  5. res.encoding = res.apparent_encoding 
  6. html = res.text 
  7. print(html) 

方法三:通過編碼、解碼的方式

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

輸出結(jié)果:

 

基本思路三步走:確定源網(wǎng)頁的編碼A---gbk、程序通過編碼B---ISO-8859-1對(duì)源網(wǎng)頁數(shù)據(jù)還原、統(tǒng)一轉(zhuǎn)換字符的編碼C-utf-8。至于為啥為出現(xiàn)統(tǒng)一轉(zhuǎn)碼這一步呢? 網(wǎng)絡(luò)爬蟲系統(tǒng)數(shù)據(jù)來源很多,不可能使用數(shù)據(jù)時(shí),再轉(zhuǎn)化為其原始的數(shù)據(jù),假使這樣做是很廢事的。所以一般的爬蟲系統(tǒng)都要對(duì)抓取下來的結(jié)果進(jìn)行統(tǒng)一編碼,從而在使用時(shí)做到一致對(duì)外,方便使用。

比如如果我們想講網(wǎng)頁數(shù)據(jù)保存下來,則會(huì)將起轉(zhuǎn)為utf-8,代碼如下:

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

四、總結(jié)

關(guān)于網(wǎng)絡(luò)爬蟲亂碼問題,本文不僅給出了一個(gè)解決方案,還深入到其中的原理,由此問題引申出很多有意思的問題,如,utf-8、gbk、gb2312的編碼方式怎樣的?為什么這樣轉(zhuǎn)化就可以解決問題?

責(zé)任編輯:武曉燕 來源: Python中文社區(qū)
相關(guān)推薦

2021-03-16 08:54:35

AQSAbstractQueJava

2011-07-04 10:39:57

Web

2021-07-20 15:20:02

FlatBuffers阿里云Java

2017-07-02 18:04:53

塊加密算法AES算法

2019-01-07 15:29:07

HadoopYarn架構(gòu)調(diào)度器

2012-05-21 10:06:26

FrameworkCocoa

2022-09-26 09:01:15

語言數(shù)據(jù)JavaScript

2020-10-19 10:35:18

數(shù)據(jù)庫監(jiān)控 系統(tǒng)

2019-11-11 14:51:19

Java數(shù)據(jù)結(jié)構(gòu)Properties

2009-11-30 16:46:29

學(xué)習(xí)Linux

2018-11-09 16:24:25

物聯(lián)網(wǎng)云計(jì)算云系統(tǒng)

2021-04-27 08:54:43

ConcurrentH數(shù)據(jù)結(jié)構(gòu)JDK8

2022-11-09 08:06:15

GreatSQLMGR模式

2012-02-21 13:55:45

JavaScript

2022-10-31 09:00:24

Promise數(shù)組參數(shù)

2009-11-18 13:30:37

Oracle Sequ

2022-12-02 09:13:28

SeataAT模式

2019-12-04 10:13:58

Kubernetes存儲(chǔ)Docker

2022-01-11 07:52:22

CSS 技巧代碼重構(gòu)

2025-03-27 09:38:35

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

亚洲va天堂va欧美ⅴa在线| 久久精品国产亚洲AV成人婷婷| 波多野结依一区| 91丨porny丨户外露出| 国产精品精品久久久| 免费精品在线视频| 嗯用力啊快一点好舒服小柔久久| 色呦呦一区二区三区| 一级做a爰片久久| 国产 日韩 欧美 综合| 日韩精品91亚洲二区在线观看| 久久香蕉国产线看观看网| 影音先锋黄色资源| 91麻豆精品国产综合久久久 | 亚洲黄页网在线观看| 久久综合久久色| 日本欧美电影在线观看| 国产色综合久久| 国产精品国产精品国产专区不卡| 中文精品久久久久人妻不卡| 欧美日韩一区二区高清| 在线亚洲午夜片av大片| 亚洲精品在线视频免费观看| 国产精品视频一区二区三区| 色噜噜偷拍精品综合在线| 日韩久久久久久久久久久久| 91在线免费看| 久久影院午夜论| 99国精产品一二二线| 中文字幕一区二区免费| 国产欧美日韩综合一区在线播放| 久久综合九色九九| 呻吟揉丰满对白91乃国产区| 亚洲裸色大胆大尺寸艺术写真| 欧美一区二区私人影院日本| 色综合天天色综合| 韩漫成人漫画| 亚洲国产欧美在线人成| dy888午夜| 91大神在线网站| 国产精品嫩草影院com| 蜜桃av色综合| 先锋av资源站| 99精品偷自拍| 精品国产二区在线| 精品人妻午夜一区二区三区四区| 久久se这里有精品| 国产精品普通话| 欧美视频xxxx| 日韩激情中文字幕| 国产精品狼人色视频一区| 国产91国语对白在线| 国产欧美一区二区三区国产幕精品| 欧美日韩国产成人在线观看| 欧美人与禽zozzo禽性配| 欧美一区二区三区久久精品| 欧美裸体xxxx极品少妇| 我要看黄色一级片| 中文字幕日韩欧美精品高清在线| 久久精品人人爽| 亚洲最大的黄色网址| 亚洲成人精选| 欧美黑人性视频| 久久精品视频国产| 1024精品一区二区三区| 91av在线影院| 亚洲高清在线看| 久久精品国产精品青草| 91亚洲一区精品| www五月婷婷| 91日韩一区二区三区| 欧美一区二区视频在线| 一级日本在线| 曰韩精品一区二区| cao在线观看| 345成人影院| 欧美日韩在线播| a级大片免费看| 国产精品男女| 国产亚洲欧美另类中文| 91精品一区二区三区蜜桃| 欧美视频在线观看| 欧美在线中文字幕| 国产又粗又猛又黄| 高清久久久久久| 欧美日韩在线不卡一区| 日韩毛片久久久| 亚洲在线观看免费视频| 久久精品国产精品亚洲色婷婷| 成人国产激情在线| 欧美精品一区二区三区久久久| 性色av蜜臀av色欲av| 欧美电影三区| 国产69精品久久久| 中文字幕免费观看视频| 国产91对白在线观看九色| 欧美不卡三区| 怡红院av在线| 欧美最猛性xxxxx直播| 性xxxxxxxxx| 国模吧精品视频| 九九九久久久久久| 国产一区二区视频网站| 国产成人在线视频免费播放| 日韩欧美激情一区二区| 国产精品69xx| 欧美日韩国产成人在线免费| 国产成人精品无码片区在线| 99精品视频在线观看免费播放 | 日本系列第一页| 老司机精品视频在线| 久久久久久久久四区三区| 国产二区三区在线| 色婷婷精品大在线视频| 亚洲日本久久久| 久久精品国内一区二区三区水蜜桃| 秋霞午夜一区二区| 不卡的日韩av| 亚洲少妇最新在线视频| 日韩av片网站| 自拍自偷一区二区三区| 欧美激情网站在线观看| 91麻豆国产视频| 国产欧美日韩在线| 欧美韩国日本在线| 国产美女撒尿一区二区| 欧美成人激情在线| 国产精品玖玖玖| 中文字幕第一区第二区| 国产1区2区在线| 欧美电影在线观看免费| 久久久久久久久久久成人| 国产美女明星三级做爰| 国产精品久久久爽爽爽麻豆色哟哟| 欧美韩国日本在线| 自拍视频一区| 日韩免费观看视频| 久久精品色图| 日韩欧美一区二区在线| 特大黑人巨人吊xxxx| 亚洲日本成人| 激情伦成人综合小说| 麻豆av在线免费观看| 日韩一区国产二区欧美三区| 999精品视频在线观看播放| 久久国产剧场电影| 免费看啪啪网站| 91精品视频一区二区| 久热国产精品视频| 国产成人精品a视频| 亚洲精品国产成人久久av盗摄| 一级淫片在线观看| 一本一道久久a久久精品蜜桃| 成人美女免费网站视频| 九义人在线观看完整免费版电视剧| 欧美日韩国产小视频在线观看| 欧美aaa级片| 经典一区二区三区| 欧美中文字幕在线观看视频| jizzjizzjizz欧美| 91av视频在线播放| 国产无套粉嫩白浆在线2022年| 91黄色小视频| 三级黄色在线观看| 国产不卡视频在线观看| 国产伦精品一区二区三区四区视频_| 国内精品麻豆美女在线播放视频| 2019亚洲男人天堂| 国产香蕉视频在线看| 欧美日韩二区三区| 久操视频免费在线观看| 99国产精品久久久久| 国产精品免费观看久久| 欧美国产一级| 国产成人亚洲欧美| 一区二区电影免费观看| 中文字幕亚洲欧美日韩在线不卡| 一二三区中文字幕| 洋洋av久久久久久久一区| 丰满少妇在线观看资源站| 日本不卡一二三区黄网| 国产又粗又大又爽的视频| 九九热播视频在线精品6| 日av在线播放中文不卡| 色网站免费在线观看| 精品国产一二三| 麻豆精品久久久久久久99蜜桃| 国产精品大尺度| 乱码一区二区三区| 美女国产一区| 国产又粗又长又爽视频| 久久99国内| 亚洲一区二区久久久久久| 国产精品电影| 久久精品成人动漫| 无码精品一区二区三区在线| 欧美日韩一区视频| 青青操免费在线视频| 国产精品麻豆视频| 国产麻豆天美果冻无码视频| 久久精品999| 国产欧美在线一区| 欧美成人中文| 亚洲欧洲精品一区| 亚洲春色h网| 波多野结衣一区二区三区在线观看| www.youjizz.com在线| 亚洲女成人图区| 国产片在线播放| 欧美日韩亚洲一区二| 污污污污污污www网站免费| 亚洲第一视频在线播放| 动漫精品一区二区| 懂色av蜜桃av| 91偷拍与自偷拍精品| 欧美污在线观看| 久久国产一二区| 久久综合九色综合88i| 亚洲精品tv久久久久久久久久| 日本高清不卡一区二区三| 成人黄色av网址| 91欧美日韩一区| www.国产精品| 国产91免费看片| 国产激情在线播放| 欧美肥老妇视频| 久操视频在线免费播放| 中文字幕综合一区| 国产免费永久在线观看| 日韩精品极品视频| 蜜臀久久99精品久久久| 日韩欧美色电影| 国产suv一区二区| 在线91免费看| 国产精品国产精品国产专区| 欧美色爱综合网| 亚洲国产精品无码久久久| 欧美视频在线观看 亚洲欧| 国产精品7777| 午夜亚洲国产au精品一区二区| 欧美久久久久久久久久久久| 专区另类欧美日韩| 欧洲美女女同性互添| 国产精品美女久久久久久2018| 人妻少妇无码精品视频区| 26uuu久久天堂性欧美| 污污内射在线观看一区二区少妇| 国产成人精品影院| 欧美一级大片免费看| 岛国精品一区二区| 欧洲熟妇的性久久久久久| 国产成人精品一区二区三区四区 | 国产精品乱人伦| 免费毛片视频网站| 国产日产欧美一区二区视频| 中文字幕 自拍| 国产精品美女久久久久久| 2025国产精品自拍| 亚洲综合色区另类av| 国产在线视频二区| 欧美日韩国产中文字幕| 成人h动漫精品一区二区下载| 欧美在线小视频| 国产精品国产精品国产专区| 日韩三区在线观看| 人成网站在线观看| 日韩精品中文字幕在线播放| 国产三级视频在线播放线观看| 在线丨暗呦小u女国产精品| 色视频在线免费观看| 九九热99久久久国产盗摄| 99爱在线视频| 国产精品入口夜色视频大尺度| 在线播放成人| 高清国产在线一区| 亚洲综合图色| 免费看av软件| 亚洲午夜极品| 日韩免费高清在线| 精品亚洲成a人| 日本国产在线视频| 国产日韩欧美不卡| 国产大学生自拍| 欧美日韩国产麻豆| 亚洲自拍第二页| 亚洲第一精品夜夜躁人人爽| 极品美乳网红视频免费在线观看| 色噜噜狠狠狠综合曰曰曰88av| 视频在线观看入口黄最新永久免费国产 | 国内精品免费视频| 国产无一区二区| 特级片在线观看| 在线观看不卡一区| 免费观看a视频| 深夜精品寂寞黄网站在线观看| 国内高清免费在线视频| 国产精品视频久久| 久久porn| 国产盗摄视频在线观看| 久久久水蜜桃av免费网站| 91香蕉视频免费看| 国产日韩精品一区二区三区在线| 色在线观看视频| 91黄色免费看| 天堂在线视频免费观看| 久久精品国产久精国产思思| 国产高清不卡| 国产福利久久精品| 国产精品99久久精品| 黑森林福利视频导航| 国产河南妇女毛片精品久久久 | 国产精品av免费在线观看| 亚洲日本va午夜在线电影| 亚洲bbw性色大片| 99在线热播精品免费99热| 久久久久久久久久毛片| 国产亚洲精品7777| 人人干人人干人人干| 欧美一区二区三区四区高清| 成人动漫在线免费观看| 2025国产精品视频| 国产suv精品一区| 最新黄色av网站| 久久精品国产免费| 人妻熟人中文字幕一区二区| 色欧美乱欧美15图片| 亚洲av片在线观看| 久久免费国产视频| 综合视频一区| av动漫在线免费观看| 狠狠色丁香久久婷婷综合丁香| 99久久久无码国产精品衣服| 福利一区福利二区微拍刺激| 黄色av免费观看| 欧美激情亚洲综合一区| 五月亚洲婷婷| 免费观看国产视频在线| 国产一区欧美一区| 国产精品丝袜一区二区| 欧美高清视频一二三区| 在线免费观看黄| 91老司机在线| 最新精品国产| 四虎永久免费观看| 亚洲地区一二三色| 性插视频在线观看| 57pao精品| 国产a久久精品一区二区三区| 一本大道熟女人妻中文字幕在线| 91丨九色丨尤物| 一级做a爰片久久毛片| 亚洲人成五月天| 91福利精品在线观看| 亚洲成色www久久网站| 乱一区二区av| 国产又粗又硬又长又爽| 3atv一区二区三区| 密臀av在线| 久久偷看各类wc女厕嘘嘘偷窃 | 91在线看www| 午夜久久久久| 日本一级片在线播放| 色婷婷久久久综合中文字幕| 国产系列在线观看| 91免费看国产| 亚洲三级观看| 国产精久久一区二区三区| 欧美老女人在线| 男人天堂亚洲天堂| 欧美精品国产精品久久久| 人人精品人人爱| 免费视频一二三区| 精品无人国产偷自产在线| 成人黄色免费观看| 嫩草影院中文字幕| 久久久久久久综合色一本| 91麻豆国产在线| 88国产精品欧美一区二区三区| 国产精品羞羞答答在线观看| 污视频网址在线观看| 亚洲高清免费观看高清完整版在线观看| 色哟哟在线观看| 成人激情视频小说免费下载| 在线观看日韩av电影| 大胸美女被爆操| 精品国产一区二区在线观看| 卡通欧美亚洲| www.男人天堂网| 国产色综合久久| 日韩一级片免费| 国产日韩亚洲欧美| 亚洲国产1区| 波多野结衣喷潮| 亚洲精品福利资源站| 亚洲狼人综合| av免费播放网址| 亚洲精品国产无套在线观| 国产高清在线观看| 国产一区不卡在线观看| 老司机一区二区|