Skip to content

Interim report

stayjay edited this page Jun 12, 2022 · 1 revision

簡單的使用爬蟲(Beautiful Soup ,Pandas)

Beautiful Soup

Beautiful Soup 函式庫 ( 模組 ) 是一個 Python 外部函式庫,

可以分析網頁的 HTML 與 XML 文件,並將分析的結果轉換成「網頁標籤樹」( tag ) 的型態

讓資料讀取方式更接近網頁的操作語法

安裝 Beautiful Soup 模組

pip install beautifulsoup4

使用 Beautiful Soup 時,會讀取特定的網頁結構 ( 如同上面的範例會從網頁原始碼裡讀取 title 的標籤 ),

因此必須要從網頁原始碼著手,稍微了解網頁的架構,如果要觀看原始碼,

可以用瀏覽器 ( Chrome ) 開啟網頁,用滑鼠在網頁的任意位置按下右鍵,點選「檢視網頁原始碼」。

網頁是由「標籤」的語法所構成,標籤 ( tag ) 指的是由「<」和「>」包覆的代碼,通常沒有斜線的「<標籤>」作為開頭,有斜線「</標籤>」做為結尾,

標籤代碼並不會顯示在網頁中,只有被標籤包覆的內容才會顯示在網頁裡,而標籤也會互相層疊包覆,形成所為的「巢狀結構」。

每個標籤和所包覆的內容,會組合成一個 DOM ( 文件模型 ),網頁的程式通常會針對 DOM 去做運算和處理,

也可以針對不同的 DOM,給予不同的 id 或樣式屬性 ( attribute、class、style...等 ),

只要知道 DOM 的標籤,或是取得特定的 id、class 或 attribute,就能進一步透過程式控制 DOM。

BeautifulSoup 範例

以PTT資訊版為例 : https://www.ptt.cc/bbs/MobileComm/index.html

import requests
from bs4 import BeautifulSoup

r = requests.get("https://www.ptt.cc/bbs/MobileComm/index.html") #將網頁資料GET下來
soup = BeautifulSoup(r.text,"html.parser") #將網頁資料以html.parser
sel = soup.select("div.title a") #取HTML標中的 <div class="title"></div> 中的<a>標籤存入sel
for s in sel:
    print(s["href"], s.text)

輸出

/bbs/MobileComm/M.1655032520.A.60A.html [情報] Z Flip 4野外曝光 折痕更小 其他沒啥變
/bbs/MobileComm/M.1655033364.A.C32.html [情報] OnePlus 10/10T搭8G1+長得更順眼但還是醜
/bbs/MobileComm/M.1655035936.A.29C.html [心得] S22u使用心得
/bbs/MobileComm/M.1655036792.A.A4D.html [問題] ipad1 or ipad2 系統問題
/bbs/MobileComm/M.1655041651.A.466.html [問題] 小米智慧家電連音箱
/bbs/MobileComm/M.1632715576.A.195.html [公告] MobileComm板規
/bbs/MobileComm/M.1654840973.A.B2A.html [公告] 置底閒聊區 (2022下半年)

失敗

程式碼參考自:https://ithelp.ithome.com.tw/articles/10202121

Pandas

andas DataFrame資料結構非常適合用於表格式資料的儲存及處理,

也因此被應用於許多的情境,而讀取網頁上的表格(Table)資料則是最常見的應用之一。

安裝Pandas 套件

pip install pandas

例子

以110年度氣象資料表為爬取網址:https://ari.kinmen.gov.tw/cp.aspx?n=111C327C9E7BC29A

import pandas
dfs =pandas.read_html('https://ari.kinmen.gov.tw/cp.aspx?n=111C327C9E7BC29A')
type(dfs)#查看
len(dfs)
dfs[1]

輸出

項目 月份	平均 氣溫 (℃)	平均 相對 濕度 (%)	降雨量 (mm)	最多 風向	平均 風速 (m/s)	降雨 日數	日照 時數	有霧 日數
0	1	13.3	66.1	0.0	NE	3.00	0.0	229.2	0.0
1	2	15.7	76.0	42.0	NE	2.40	4.0	169.4	1.0
2	3	17.6	82.7	19.5	NE	2.40	5.0	159.4	1.0
3	4	20.6	75.9	70.0	NE	2.60	7.0	141.4	0.0
4	5	26.1	89.5	61.5	SW	2.30	13.0	191.0	0.0
5	6	27.5	88.6	63.5	SW	2.40	12.0	173.2	0.0
6	7	29.6	84.4	9.0	SW	2.30	3.0	275.2	0.0
7	8	28.8	89.0	148.0	SW	2.10	7.0	224.8	0.0
8	9	29.1	79.8	7.5	E	1.90	3.0	272.3	0.0
9	10	26.1	67.9	4.0	NE	3.50	2.0	180.7	0.0
10	11	20.7	64.8	5.0	NNE	2.90	3.0	159.6	0.0
11	12	16.5	63.0	30.5	NE	3.20	2.0	174.7	0.0
12	平均	22.6	77.3	NaN	NaN	2.58	NaN	195.9	NaN
13	總計	NaN	NaN	460.5	NaN	NaN	61.0	NaN	NaN

失敗

程式碼原創

總結

Beautiful Soup 和Pandas兩者都是爬蟲的好工具

Beautiful Soup適合用在分析網頁的 HTML 與 XML 文件或是純文字

Pandas適合用在有表格的網頁

參考網址

https://ithelp.ithome.com.tw/articles/10202121

https://ari.kinmen.gov.tw/cp.aspx?n=111C327C9E7BC29A

https://steam.oxxostudio.tw/category/python/spider/beautiful-soup.html

https://www.learncodewithmike.com/2020/11/read-html-table-using-pandas.html

Clone this wiki locally