操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    作者 | 丁彥軍

    責編 | 仲培藝

    近日,有位粉絲向我請教,在爬取某網站時,網頁的源代碼出現了中文亂碼問題,本文就將與大家一起總結下關于網絡爬蟲的亂碼處理。注意,這里不僅是中文亂碼,還包括一些如日文、韓文 、俄文、藏文之類的亂碼處理,因為他們的解決方式是一致的,故在此統一說明。

    亂碼問題的出現

    就以爬取 51job 網站舉例,講講為何會出現“亂碼”問題,如何解決它以及其背后的機制。

    代碼示例:

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

    顯示結果:

    打印 res.text 時,發現了什么?中文亂碼?。。〔贿^發現,網頁的字符集類型采用的是 GBK 編碼格式。

    我們知道 Requests 會基于 HTTP 頭部對響應的編碼作出有根據的推測。當你訪問 r.text 之時,Requests 會使用其推測的文本編碼。你可以找出 Requests 使用了什么編碼,并且能夠使用 r.encoding 屬性來改變它。

    接下來,我們一起通過 Resquests 的一些用法,來看看 Requests 會基于 HTTP 頭部對響應的編碼方式。

    print(res.encoding) #查看網頁返回的字符集類型
    print(res.apparent_encoding) #自動判斷字符集類型
    

    輸出結果為:

    可以發現 Requests 推測的文本編碼(也就是網頁返回即爬取下來后的編碼轉換)與源網頁編碼不一致,由此可知其正是導致亂碼原因。

    亂碼背后的奧秘

    當源網頁編碼和爬取下來后的編碼轉換不一致時,如源網頁為 GBK 編碼的字節流,而我們抓取下后程序直接使用 UTF-8 進行編碼并輸出到存儲文件中,這必然會引起亂碼,即當源網頁編碼和抓取下來后程序直接使用處理編碼一致時,則不會出現亂碼,此時再進行統一的字符編碼也就不會出現亂碼了。最終爬取的所有網頁無論何種編碼格式,都轉化為 UTF-8 格式進行存儲。

    注意:區分源網編碼 A-GBK、程序直接使用的編碼 B-ISO-8859-1、統一轉換字符的編碼 C-UTF-8。

    在此,我們拓展講講 Unicode、ISO-8859-1、GBK2312、GBK、UTF-8 等之間的區別聯系,大概如下:

    最早的編碼是 ISO8859-1,和 ASCII 編碼相似。但為了方便表示各種各樣的語言,逐漸出現了很多標準編碼。ISO8859-1 屬于單字節編碼,最多能表示的字符范圍是 0-255,應用于英文系列。很明顯,ISO8859-1 編碼表示的字符范圍很窄,無法表示中文字符。

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

    也可以這樣來理解:字符串是由字符構成,字符在計算機硬件中通過二進制形式存儲,這種二進制形式就是編碼。如果直接使用 “字符串??字符??二進制表示(編碼)” ,會增加不同類型編碼之間轉換的復雜性。所以引入了一個抽象層,“字符串??字符??與存儲無關的表示??二進制表示(編碼)” ,這樣,可以用一種與存儲無關的形式表示字符,不同的編碼之間轉換時可以先轉換到這個抽象層,然后再轉換為其他編碼形式。在這里,Unicode 就是 “與存儲無關的表示”,UTF-8 就是 “二進制表示”。

    亂碼的解決方法

    根據原因來找解決方法,就非常簡單了。

    方法一:直接指定 res.encoding

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

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

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

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

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

    輸出結果:

    基本思路三步走:確定源網頁的編碼 A---GBK、程序通過編碼 B---ISO-8859-1 對源網頁數據還原、統一轉換字符的編碼 C-UTF-8。至于為啥出現統一轉碼這一步呢? 網絡爬蟲系統數據來源很多,不可能使用數據時,再轉化為其原始的數據,這樣做是很廢事的。所以一般的爬蟲系統都要對抓取下來的結果進行統一編碼,從而在使用時做到一致對外,方便使用。

    比如如果我們想講網頁數據保存下來,則會將起轉為 UTF-8,代碼如下:

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

    總結

    關于網絡爬蟲亂碼問題,這里不僅給出了一個解決方案,還深入到其中的原理,由此問題引申出很多有意思的問題,如 UTF-8、GBK、GB2312 的編碼方式怎樣的?為什么這樣轉化就可以解決問題?

    最后,多動腦,多思考,多總結,致每一位碼農!

    本文為作者投稿,版權歸其所有。

    трансвестит人妖

    транснациональные группы跨國集團

    тривилочный三項的(電源插座)

    триколор三色旗

    тургруппа旅游團

    турнир большого шлема(體育比賽)大滿貫

    турфирма旅游公司

    удаление вируса病毒攻擊

    узел(超市)收銀臺

    узнать из Интернета從網上獲知

    улёт太棒了、太好了

    утка-мандаринка鴛鴦

    училка(учительница)大學女教師

    файл(電腦)文件

    фактивная сеть虛擬網

    фанта芬達(飲料名稱)

    фаст-фуд快餐

    фейс-лифтинг(面部)除皺整容

    феномен Эль Нинью厄爾尼諾現象

    феня行話、黑話

    фирма-изготовитель廠商、制造商

    фирменный品牌的、名牌的、豪華的

    фирменный магазин專賣店

    фифти-фифти不好不壞、中不溜兒

    фиче(廣播、電視)特別節目、專題節目

    фломаркт跳蚤(舊物)市場

    форвард-рынок期貨市場

    форум論壇

    Фотоархив圖庫

    фофан不中用的人(廢物點心)

    франчайзинг特許經營、特許經銷、特性經營權

    фуникулёр空中纜車(索道)

    фуршет冷餐會

    хакер電腦黑客

    хакнуть хакер黑客行為

    халява免費招待

    хит-парад流行歌曲排行榜

    хи-фи高保真

    холдинг持股、控股

    ХОНДА本田牌汽車

    хот-дог熱狗

    хотимчик青春痘

    хот-лайн熱線

    Чайна-таун中國城、唐人街

    четырёхполосный四車道的

    чистый無公害的

    стрип-шоу 脫衣舞表演

    субподрядчик 分包商

    супермаркет 超市、自選商場

    супермодель 名模

    суперприз 巨獎

    суперстар 超級明星

    таймер 定時裝置

    тайное голосование 不(無)記名投票

    татуировка 文身

    телеобращение (領導人)電視講話

    тендер 招標

    теневая экономика 泡沫經濟

    террарист 恐怖分子

    тихое вино (酒)不起沫、不起泡

    ток шоу 脫口秀

    сверхмодник穿著最時髦的人

    сверхпопулярный非常流行、特別走紅

    сверхрентабельный效益極好的、非常贏利的

    сдержать遏制

    седмин網絡管理人員

    сексапил性感

    сексуальный

    сервер(計算機)服務器

    server сервер服務器

    сериал電視連續劇

    сидеть в Интернете在線

    синхронный перевод同聲傳譯

    Сказала одна баба小道消息

    скальпер黃牛(倒票者)

    сканировать掃描

    скелетон(滑雪運動)大回轉

    скоростная автострада高速公路

    скотч透明膠帶

    слабня窩囊廢(病秧子)

    смол ток非正式會談

    соблюдать экологический баланс保持生態平衡

    реконструктивная整形(修復)外科

    хирургия Рено雷諾牌汽車

    рефераты文摘、概述

    робот機器人

    робот- убийца冷血殺手(殺人機器)

    ров, разделяющий разные поколения代溝

    рок搖滾樂рок-музыка рокер“羅克”(開飛車的人)

    роллинг滑板運動rolling

    Роллс-ройс勞斯萊斯牌汽車

    роса一整天

    от росы до росы русовец俄國通

    рынок труда勞務市場

    рюхать懂、明白、在行

    политике электронике сайз(鞋、帽子)尺寸

    сайт(通過)網上聯絡

    сайт網站

    саммит政府首腦峰會

    Самсунг三星韓國著名品牌

    самый-самый(在某方面)最好的、最突出的

    санкабина(帶廁所和浴室的)衛生間

    преподователь教師

    Пресс-центр新聞中心

    привилегия特權

    прикид外貌

    приспущённый флаг в знак траура降半旗(志哀)

    продюсер制片人

    Проктери Гэмбл寶潔公司

    промоутер經紀人

    противоперхотный去頭皮屑的

    Пятизвёздочный отель五星級飯店

    равновозрастный同齡的

    разархивация解壓縮

    разборка“擺平”

    разгрузка下載

    раскрутить炒作

    рассклёшенные брюки喇叭褲

    растаможить辦理通關手續

    регенерация энергии再生能源

    резкий спад暴跌

    Липоаспирация吸脂

    литиево ионная батарея鋰電池

    лифтинг去皺

    Логин登錄

    магазин сетевой торговли連鎖商店

    магнитный диск軟盤

    маджонг麻將

    мажоритарный最大的

    Мазда馬自達牌汽車

    малоградусный低度的(含酒精少的)

    маржа保證金

    маркетинг營銷

    маскотка吉祥物

    материковый Китай中國大陸

    Медиа媒體

    международная космическая станция國際空間站

    мерзавчик小瓶白酒

    метеобюро氣象臺

    жёлтая карточка(體育比賽)黃牌警告

    жёсткий диск硬盤

    живое телевидение現場直播

    жидкокристаллический液晶的

    жилмассив住宅小區

    жирок油水、賺頭

    зависание電腦死機

    зависание死機

    загранигор駐外記者

    загранучредение駐外機構

    переписывание программы

    зайчик(計算機)光標

    залететь懷孕

    заочка函授部

    запрашивать чрезмерную цену“宰人”(抬高物價)

    заражение атипичной пневмонией感染非典

    засветиься敗壞某人的聲譽

    заскачить被關入警察局

    зелёнка迷彩服

    кокаин可卡因

    Кока-кола可口可樂

    колёса麻醉藥品

    количество продаж мировых цен測評(調查)

    комиксы假期

    комиссионные со сделки回扣

    комиссионный магазин寄賣店

    комиссонная продажа寄售

    компьютерный томографCT掃描

    конверсия軍轉民

    Контактные координаты聯系方式

    контакты隱形眼鏡

    корректор涂改液

    коррупционер貪官

    коррупция貪污

    красный прилив赤潮

    кредит под закладную按揭貸款

    кредитная карточка信用卡

    крем-маска面霸

    крем-основа粉底霜

    кристалл芯片

    крюкизябл亂碼

    лазерный принтер激光打印機

    Золотой треугольник金三角

    золотые часы(電視)黃金時段

    имидж形象(外表)

    имиджмайкер形象設計師

    имиджмейкерство形象設計

    импичмент彈劾(不信任提案)

    импровизированное

    выступление即席講話

    инвестиционный фонд投資基金

    индивидуал個體勞動者

    индоссамент(銀行)背書

    ининг美式橄欖球

    иномарка國外品牌

    инспекция核查

    инсталекция(активание программы)程序(軟件)被激活

    информационый взрыв信息爆炸

    кабельное делевидение

    有線電視、閉路電視

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有