code:
from bs4 import BeautifulSoup
html = """
<html>
<body>
<div class="product" id="item1">商品1</div>
<div class="product" id="item2">商品2</div>
<p class="product">段落</p>
</body>
</html>
"""
soup = BeautifulSoup(html, 'html.parser')
# find_all() 的寫法
results1 = soup.find_all('div', class_='product') # 標籤名, 屬性名=值
results2 = soup.find_all('div', id='item1') # 標籤名, 屬性名=值
# select() 的寫法
results3 = soup.select('div[class="product"]') # 標籤名[屬性名="值"]
results4 = soup.select('[class="product"]') # [屬性名="值"] (不限標籤)
results5 = soup.select('div') # 標籤名
print("find_all() 結果:")
print(results1) # 找到兩個 div class="product"
print(results2) # 找到一個 div id="item1"
print("\nselect() 結果:")
print(results3) # 找到兩個 div class="product"
print(results4) # 找到所有 class="product" (包含 div 和 p)
print(results5) # 找到所有 div
輸出結果:
find_all():
參數格式:find_all(標籤名, 屬性名=值)
例如:find_all(‘div’, class_=’product’)
select():
參數格式:select(‘標籤名[屬性名=”值”]’)
或只用標籤名:select(‘div’)
或只用屬性:select(‘[class=”product”]’)
[] 是 定位的意思
select() 使用的是 CSS 選擇器語法,
所以更靈活,可以用更複雜的選擇條件。
以下三者同效果:
使用soup.find_all(‘div’, class_=’product’) 時,
class_是外露的參數名,
且跟Python個關鍵字class撞名
所以結尾多一個_
避免撞名
使用.select()時,"div[class='product']"
class被字串的雙引號包覆
不需要修改
屬性名剛好是class,
可以使用.連接
以下三者同效果:
屬性名剛好是id
可以使用#連接
推薦hahow線上學習python: https://igrape.net/30afN
近期留言