攝影或3C

Python爬蟲:BeautifulSoup的.find_all() 與select() ; from bs4 import BeautifulSoup

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

儲蓄保險王

儲蓄險是板主最喜愛的儲蓄工具,最喜愛的投資理財工具則是ETF,最喜愛的省錢工具則是信用卡