333
本周目標
學習WebCrawler基本用法與應用
任務
- 如何訪問網站加入瀏覽器資訊並取得網站資料
- 使用Beautifulsoup抓取網站標題
專案練習
目標: 抓取PTT電影版第一頁標題
網頁原始碼範例:
<div class="title">
<a href="/bbs/movie/M.1731766038.A.B52.html">[請益] 魔法壞女巫4DX?</a>
</div>
文章被刪除範例
<div class="title">
(本文已被刪除) [NTUIBrother]
</div>
觀察原始碼:
發現每篇文章標題都被一個<a>標籤包裹,再被一個<div>的標籤包裹
若文章被刪除開頭沒有<a>標籤>
程式碼撰寫:
- 引入BeautifulSoup模組解析HTML,html.parser為BeautifulSoip提供的解析器之一
- 從HTML找到所有<div>的標籤,class的屬性為”title”的元素,class後面加上_是因為Python已經內建class這個保留字,所以BeautifulSoup使用class_作為替代,避免衝突
- for迴圈找到所有<div class=”title”>的標籤,並檢查是否存在<a>標籤,避免出現None情況(文章被刪除)
- 輸出所有含<a>標籤的標題
import urllib.request as req
url="https://www.ptt.cc/bbs/movie/index.html"
request=req.Request(url, headers={
"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36"
})
with req.urlopen(request) as response:
data=response.read().decode("utf-8")
import bs4
root=bs4.BeautifulSoup(data,"html.parser")
titles=root.find_all("div",class_="title")
for title in titles:
if title.a:
print(title.a.string)
Output
[新聞] 金馬61影帝組分析《餘燼》張震:與《緝魂
[情報] 破地獄票房衝破6000萬港幣
[討論] (雷)鍾孟宏坦言《餘燼》目標從不在和解,而是
[討論] 惡魔教室的老師(有劇透)
[新聞] 《媽媽咪呀!3》籌劃中 布洛斯南樂見其成
[問片] 西洋恐怖片?
[問片] 請問這部韓國電影 or 影集的名稱
[請益] 有角頭-大橋頭,每一個幫派的合照嗎??
[新聞] 榮譽奧斯卡致敬昆西瓊斯!紅毯眾星雲集
[公告] 電影板板規 2022/12/5
[公告] 禁政治版規 及 投票結果