Python練習#12-使用Beautifuls]Soup模組解析網站抓取資料

by Gemma

本周目標

學習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>標籤>

程式碼撰寫:

  1. 引入BeautifulSoup模組解析HTML,html.parser為BeautifulSoip提供的解析器之一
  2. 從HTML找到所有<div>的標籤,class的屬性為”title”的元素,class後面加上_是因為Python已經內建class這個保留字,所以BeautifulSoup使用class_作為替代,避免衝突
  3. for迴圈找到所有<div class=”title”>的標籤,並檢查是否存在<a>標籤,避免出現None情況(文章被刪除)
  4. 輸出所有含<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
[公告] 禁政治版規 及 投票結果

You may also like

Leave a Comment