Beautiful Soup - 透過ID查詢元素



在HTML文件中,通常每個元素都會分配一個唯一的ID。這使得可以透過前端程式碼(例如JavaScript函式)提取元素的值。

使用BeautifulSoup,您可以透過其ID查詢給定元素的內容。可以透過兩種方法實現這一點——find()和find_all(),以及select()。

使用find()方法

BeautifulSoup物件的find()方法搜尋滿足給定條件(作為引數)的第一個元素。

讓我們使用以下HTML指令碼(作為index.html)作為示例

<html>
   <head>
      <title>TutorialsPoint</title>
   </head>
   <body>
      <form>
         <input type = 'text' id = 'nm' name = 'name'>
         <input type = 'text' id = 'age' name = 'age'>
         <input type = 'text' id = 'marks' name = 'marks'>
      </form>
   </body>
</html>

以下Python程式碼查詢id為nm的元素

示例

from bs4 import BeautifulSoup

fp = open("index.html")
soup = BeautifulSoup(fp, 'html.parser')

obj = soup.find(id = 'nm')
print (obj)

輸出

<input id="nm" name="name" type="text"/>

使用find_all()

find_all()方法也接受一個過濾器引數。它返回所有具有給定ID的元素的列表。在某個HTML文件中,通常只有一個具有特定ID的元素。因此,使用find()而不是find_all()來搜尋給定ID是更可取的。

示例

from bs4 import BeautifulSoup

fp = open("index.html")
soup = BeautifulSoup(fp, 'html.parser')

obj = soup.find_all(id = 'nm')
print (obj)

輸出

[<input id="nm" name="name" type="text"/>]

請注意,find_all()方法返回一個列表。find_all()方法還有一個limit引數。將limit=1設定為find_all()等效於find()

obj = soup.find_all(id = 'nm', limit=1)

使用select()方法

BeautifulSoup類中的select()方法接受CSS選擇器作為引數。#符號是ID的CSS選擇器。它後面跟著所需ID的值,傳遞給select()方法。它的作用與find_all()方法相同。

示例

from bs4 import BeautifulSoup

fp = open("index.html")
soup = BeautifulSoup(fp, 'html.parser')

obj = soup.select("#nm")
print (obj)

輸出

[<input id="nm" name="name" type="text"/>]

使用select_one()

與find_all()方法類似,select()方法也返回一個列表。還有一個select_one()方法可以返回給定引數的第一個標籤。

示例

from bs4 import BeautifulSoup

fp = open("index.html")
soup = BeautifulSoup(fp, 'html.parser')

obj = soup.select_one("#nm")
print (obj)

輸出

<input id="nm" name="name" type="text"/>
廣告