爬蟲學習筆記 3 爬蟲中常見的字串編碼問題

2021-08-30 21:31:14 字數 1337 閱讀 3946

先來說一說編碼問題的歷史(不感興趣的童鞋可以直接跳過,直接看重點部分)

由於計算機是美國人發明的,所以一開始的編碼格式採用美國人制定的ascii碼,用乙個位元組(byte)儲存常用的英文本母和字元,前期用了128個字元,後來加入了一些歐洲國家的符號,使用的就是128-255這一段的字元,所以這時使用了256個字元。

再到後來隨著計算機的普及,越來越多的國家在使用的過程中發現現有的這一套編碼系統不能滿足自己的需求,就開發出了一套自己的編碼系統,較為常見的有中國的gb2312編碼格式。注:gb2312是簡體中文的編碼格式,經過擴充套件後變成了可以顯示正體中文的gbk編碼格式。

但是這就出現了乙個問題,不同的編碼格式下傳輸資訊就會出現顯示的亂碼問題,而且資料的傳輸也極為不方便。

當然,這樣的小問題是難不倒聰明的人類的

於是偉大的unicode編碼就出現了,它將世界上所有的編碼格式統一,它用兩個位元組表示乙個字元。也就是說將原有的乙個位元組表示的字元(如英文本母,英文本元等)進行擴充套件,將高位補零,統一採用兩個位元組進行表示。然後對世界上所有的語言符號進行統一的編碼。這樣就可以表示2的16次方個不同的字元,也就是65535個字元。

但是。。。。

又有問題出現了。。。

比如在傳輸一篇全英文的檔案時,由於unicode會將高位全部補0,將乙個位元組變成兩個位元組,這就會產生比原來大一倍的資料量,如果傳輸的資料量本身就很大,那這簡直就是一場災難。

當然聰明的人類又想到了解決辦法

在進行資料傳輸的時候,將原來定長的unicode編碼變成變長的utf8編碼。

重要的utf8編碼:它可以使用1-4個位元組表示乙個符號,根據不同的符號可以變換位元組的長度。

具體的編碼規則這裡就不贅述了,有興趣的童鞋可以去查查相關資料。

所以下面將是本文的重點

在python程式的執行過程中,如果遇到編碼不一致的問題,就需要進行轉碼。就好像兩個不同語言的人想要交流,就得帶乙個翻譯一樣。

在平常寫程式的時候,通常會遇到三個方面的編碼問題:

程式檔案本身的編碼問題(也就是py檔案)

pyhon執行環境的編碼問題,比如系統,資料庫,編譯軟體自身等。

讀取的外部檔案的編碼問題

在python2中這些問題真的很繁瑣,需要decode(「原編碼格式」),將原編碼格式轉化成unicode編碼,然後encode,將unicode編碼轉化成utf8編碼。注:s.encode(『utf-8』),這裡的s必須是unicode編碼格式。

在python3中,已經將所有的字串統一按照unicode編碼格式,所以可以很輕鬆的用encode()方法轉化成utf-8,然後進行資料的傳輸。

python爬蟲學習筆記(3)

一般用於傳送請求和接收響應 url為必填引數,後兩個可不填 urllib.request.urlopen url,data,timeout urlopen方法返回乙個httpresponse物件 urllib.request.urlopen 此方法無法指定請求頭部,而有時必須指定請求頭部以避免被瀏覽...

python3爬蟲學習筆記

爬蟲爬取京東某手機頁面 beautifulsoup 原文記錄內容太多現進行摘錄和分類 pip3 install jieba kou ubuntu python cat clahamlet.py usr bin env python coding utf 8 e10.1calhamlet.py def...

爬蟲學習筆記num3

基於筆記二中的get傳送請求,之前沒有考慮ua偽裝,本次將get請求中的params引數和headers引數進行賦值。對於url攜帶的引數要封裝到字典中。import requests 處理url中攜帶的引數要封裝到字典中 url www.com kw input enter a word para...