-
Notifications
You must be signed in to change notification settings - Fork 0
Interim report
Beautiful Soup 函式庫 ( 模組 ) 是一個 Python 外部函式庫,
可以分析網頁的 HTML 與 XML 文件,並將分析的結果轉換成「網頁標籤樹」( tag ) 的型態
讓資料讀取方式更接近網頁的操作語法
pip install beautifulsoup4
使用 Beautiful Soup 時,會讀取特定的網頁結構 ( 如同上面的範例會從網頁原始碼裡讀取 title 的標籤 ),
因此必須要從網頁原始碼著手,稍微了解網頁的架構,如果要觀看原始碼,
可以用瀏覽器 ( Chrome ) 開啟網頁,用滑鼠在網頁的任意位置按下右鍵,點選「檢視網頁原始碼」。
網頁是由「標籤」的語法所構成,標籤 ( tag ) 指的是由「<」和「>」包覆的代碼,通常沒有斜線的「<標籤>」作為開頭,有斜線「</標籤>」做為結尾,
標籤代碼並不會顯示在網頁中,只有被標籤包覆的內容才會顯示在網頁裡,而標籤也會互相層疊包覆,形成所為的「巢狀結構」。
每個標籤和所包覆的內容,會組合成一個 DOM ( 文件模型 ),網頁的程式通常會針對 DOM 去做運算和處理,
也可以針對不同的 DOM,給予不同的 id 或樣式屬性 ( attribute、class、style...等 ),
只要知道 DOM 的標籤,或是取得特定的 id、class 或 attribute,就能進一步透過程式控制 DOM。
以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
andas DataFrame資料結構非常適合用於表格式資料的儲存及處理,
也因此被應用於許多的情境,而讀取網頁上的表格(Table)資料則是最常見的應用之一。
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