python爬蟲學習筆記(一) 解決亂碼問題

2021-09-11 04:01:01 字數 2608 閱讀 1499

使用python封裝好的模組:requests、beautifulsoup4

首先,不是import request   而是 import requests

import requests

from bs4 import beautifulsoup

response = requests.get("")

soup = beautifulsoup(response.text,features="html.parser")

target = soup.find(id='auto-channel-lazyload-article')

print(target)

執行部分截圖如下:

不難發現出現了亂碼,這裡我們需要解決一下。

1. 最初的計算機字元編碼是通過ascii來編碼的

2. 由於計算機的不斷普及,計算機進入了不同的國家和地區。因此後來出現了unicode編碼。

3. 在unicode中,很快,美國人不高興了,原本用乙個位元組就夠了,現在卻要用兩個位元組來表示,非常浪費儲存空間和傳輸速度。人們再發揮聰明才智,於是出現了utf-8編碼。主要針對空間浪費的問題。utf-8從英文本母的乙個位元組,到中文的通常的三個位元組,再到某些生僻字的六個位元組。解決了空間浪費的問題,並且相容老大哥ascii編碼。這樣一些老古董軟體在utf-8編碼中可以繼續工作了。 

4. 我們祖國也制定了自己的一套標準。那就是gb2312和gbk。但是大多數還是直接用的utf-8。utf-8/utf-16等是對unicode進行了編碼,是其一種實現方式。 

另外還有iso-8859-1,iso-8859-1是單位元組編碼,向下相容ascii,是許多歐洲國家使用的編碼標準。 

unicode是國際通用的編碼標準,可以表示全世界的字元,但其字符集也是最複雜、占用空間最大的。

首先:我們在瀏覽器中開啟目標網頁,用瀏覽器檢視原始碼,如下圖所示:

看見網頁的編碼是gb2312,也就是我們接受的編碼也需要是gb2312編碼,現在檢視我們系統的編碼方式:

網上說可以reload(sys),然後sys.setdefaultencoding(),但是實際上實踐過後發現並不能。所以這裡採用這個方法。

下面:我們看看我們接受的網頁資料流的編碼:

可以看見接收的資料流的編碼方式是iso-8859-1編碼方式。

所以在輸出的時候會將資料流用iso-8859-1的方式來顯示我們的網頁,而實際上我們的網頁是gb2312編碼的,這裡我們就需要轉換編碼。

於是我們輸出網頁的時候用:

print(page.encode("iso-8859-1").decode("gb2312"))
出現了錯誤:

gbk編碼是對g b2312編碼的擴充,容納的漢字更多,但僅僅是擴充,沒有質的變化。

所以,假設採用gbk試試:

如上圖,解析成功。

接著:我們將得到的流內容寫入到檔案中,試試:

f = open("a.txt",mode='w')

f.write(page)

f.close()

發現也沒有編碼的問題,說明猜測是正確的。

最後,我們換乙個編碼為utf-8編碼的網頁,然後,測試猜想:

沒有出現亂碼現象。

Python爬蟲學習筆記一

爬蟲 網路蜘蛛,通俗講就是模擬瀏覽器。所需要的知識架構 關於基礎知識,隨便找本書就可以 urllib和urllib2是基本的爬蟲庫 正規表示式比較關鍵 框架比較高階,至於是什麼我現在也剛開始學習,一起交流。爬網頁,首先要了解瀏覽網頁是怎麼工作的?使用者輸入 之後,經過dns伺服器,找到伺服器主機,向...

Python爬蟲學習筆記 一

以爬取乙個租房 的每一頁的每乙個租房資訊為例。分別使用集合和列表在csv檔案中展示為例。程式設計中需注意的是 from bs4 import beautifulsoup import requests import pandas as pd import time headers def judge...

python爬蟲學習筆記(一)

由於我也不是什麼專業人士,我也是在學習,這個就是我自己的乙個學習筆記,什麼爬蟲可以做什麼,為什麼學爬蟲我就不再贅述了,總結一點,爬蟲用來爬取網頁上的東西!在python中用到urllib和urllib2,urllib是python原生的乙個庫,urllib2是python創始人覺得urllib不好使...