參考網址: https://www.learncodewithmike.com/2020/02/python-beautifulsoup-web-scraper.html
import requests
from bs4 import BeautifulSoup
response = requests.get(
"https://travel.ettoday.net/category/%E6%A1%83%E5%9C%92/")
soup = BeautifulSoup(response.text, "html.parser")
print(soup.prettify()) #輸出排版後的HTML內容
result = soup.find("h3")
print(result)
包含了網頁中所有的<h3>標籤,且itemprop屬性值為headline的節點,
result = soup.find_all("h3", itemprop="headline", limit=3)
print(result)
當某一節點下只有單個子節點時,可以利用BeautifulSoup套件(Package)的select_one()方法(Method),選取子節點,如下範例:
result = soup.find("h3", itemprop="headline")
print(result.select_one("a"))
如果某一節點下有多個子節點時,則使用select()方法(Method),選取子節點,如下範例:
result = soup.find("div", itemprop="itemListElement")
print(result.select("a"))
同時搜尋多個HTML標籤
result = soup.find_all(["h3", "p"], limit=2)
print(result)
搜尋第一個符合指定的HTML標籤及css屬性值的節點,如下範例:
titles = soup.find("p", class_="summary")
print(titles)
如果單純只想要透過css屬性值來進行HTML節點的搜尋,則可以使用BeautifulSoup套件(Package)的select()方法(Method),如下範例:
titles = soup.select(".summary", limit=3)
print(titles)
以上皆為向下的搜尋節點方式,如果想要從某一個節點向上搜尋,則可以使用BeautifulSoup套件(Package)的find_parent()或find_parents()方法(Method),如下範例:
result = soup.find("a", itemprop="url")
parents = result.find_parents("h3")
print(parents)
執行結果
範例中,搜尋<a>標籤且itemprop屬性值為url的節點,接著透過find_parents()方法(Method),向上搜尋<h3>標籤的父節點。
在同一層級的節點,想要搜尋前一個節點,可以使用BeautifulSoup套件(Package)的find_previous_siblings()方法,如下範例:
result = soup.find("h3", itemprop="headline")
previous_node = result.find_previous_siblings("a")
print(previous_node)
執行結果
相反的,在同一層級的節點,想要搜尋後一個節點,則使用find_next_siblings()方法(Method),如下範例:
result = soup.find("h3", itemprop="headline")
next_node = result.find_next_siblings("p")
print(next_node)
利用get()方法(Method)取得href屬性值中的網址,如下範例:
titles = soup.find_all("h3", itemprop="headline")
for title in titles:
print(title.select_one("a").get("href"))
要取得<a>標籤的連結文字,可以利用BeautifulSoup套件(Package)的getText()方法(Method),如下範例:
titles = soup.find_all("h3", itemprop="headline")
for title in titles:
print(title.select_one("a").getText())
執行結果