iT邦幫忙

2022 iThome 鐵人賽

DAY 21
0
AI & Data

30天帶你從零基礎到Python爬蟲系列 第 21

[Day21] 爬蟲必備工具 - BeautifulSoup

  • 分享至 

  • xImage
  •  

BeautifulSoup是一個用來解析HTML結構的Python函式庫,能夠輕鬆的從HTML或XML檔案中分析資料,因此在爬蟲應用中是很常見的。今天就來開發一個簡單的爬蟲,來爬「ETtoday美食雲」網頁上的資料。

BeautifulSoup套件可以透過pip指令來進行安裝,不過就像之前安裝requests函式庫一樣,我會利用PyCharm的圖形化介面來進行安裝~

搜尋到想要的函式庫就直接點選install Package就好啦,安裝好後底下會出現一排綠色的表示已經安裝成功了。今天這個爬蟲也會需要用到requests函式庫,所以一樣要記得先安裝好,方法也是一樣的!
https://ithelp.ithome.com.tw/upload/images/20220911/20140998UQ2y7x87lF.png

安裝完成後就可以正式開始爬蟲惹。最一開始當然要先把需要的函式庫都import進去。

import requests
from bs4 import BeautifulSoup

使用requests中的get()方法存取網頁的html程式碼,接著用BeautifulSoup將取得的HTML結構字串傳回來

url = "https://www.ettoday.net/feature/et_yummy?from=ettoday-pc-sidemenu"
response = requests.get(url)
html = BeautifulSoup(response.text, "html.parser")
print(html)  # 輸出網頁的html程式碼

我擷取了一小段輸出結果。

<div class="box_0 clearfix">
<a class="pic" href="//www.ettoday.net/news/20220910/2332259.htm" target="_blank"><img src="//cdn2.ettoday.net/images/6552/c6552807.jpg"/></a>
<h2><a href="//www.ettoday.net/news/20220910/2332259.htm" target="_blank">被誤以為是廢墟!三重傳說級古早「茶冰沙」 炭焙茶香回甘不苦澀</a></h2>
<p class="summary">網友打卡瘋傳的隱藏版三重紅茶冰,外觀像是廢墟飲料店,位於新北市三重區中正南路上,近捷運菜寮站,超人氣排隊飲料名店,主打好茶、好糖、好水、好冰。必點紅茶、無憂紅茶、隨便奶一點,這裡的茶是冰沙,黃金比例最好喝,茶香回甘,不苦澀,奶香厚實濃郁,比許多客製化手搖飲料店更厲害!<a class="more" href="//www.ettoday.net/news/20220910/2332259.htm" target="_blank">詳全文>></a></p>
</div>

現在html物件已經包含了整個網頁的HTML程式碼,接下來就可以利用BeautifulSoup裡的方法,來進行節點的搜尋。

爬取標題文字

想要爬取標題文字首先你要知道標題會在HTML程式碼中的什麼位子,你可以從剛剛輸出過的程式碼中慢慢找,又或者我教你一個更快的方法。首先打開網頁後用F12看背後的程式碼,點選左上有一個箭頭的標誌。
https://ithelp.ithome.com.tw/upload/images/20220911/20140998JYvBeZnPCB.jpg
接著點標題的地方。
https://ithelp.ithome.com.tw/upload/images/20220911/201409985Dh6fC432S.png
就可以直接知道標題的部分是用包住的,接著再搜尋所有h2的部分最後列印出其中的文字。

titles = html.find_all("h2")  # 搜尋所有h2
for title in titles:
    print(title.getText())  # 只提取文字部分

爬取標題連結

剛取標題文字差不多,標題文字和連結都是用包住的,只要先搜尋所有h2的部分,剛好標籤底下只有一個標籤,所以可以用select_one()方法來選取,最後再利用get()方法取得有"href"的部分,這樣就完成啦~

titles = html.find_all("h2")  # 搜尋所有h2
for title in titles:
    print(title.select_one("a").get("href"))  # 只提取超連結部分

上一篇
[Day20] 爬蟲實戰練習 - 從網路上抓圖片
下一篇
[Day22] 爬蟲實戰演練 - 美食網站抓資料
系列文
30天帶你從零基礎到Python爬蟲30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言