Beautiful Soup 简明教程

Beautiful Soup - Find Elements by ID

在 HTML 文档中,通常每个元素都分配了一个唯一的 ID。这使得元素的值可以通过前端代码(如 JavaScript function)来提取。

使用 BeautifulSoup,你可以通过给定的元素的 ID 来查找它的内容。可以通过以下两种方法来实现这一点——find() 和 find_all(),以及 select()。

Using find() method

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 的元素:

Example

from bs4 import BeautifulSoup

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

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

Output

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

Using find_all()

find_all() 方法也接受一个过滤器参数。它返回所有具有给定 id 的元素的列表。在某些 HTML 文档中,通常具有特定 id 的单个元素。因此,使用 find() 来搜索给定的 id 比使用 find_all() 更可取。

Example

from bs4 import BeautifulSoup

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

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

Output

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

请注意,find_all() 方法返回一个列表。find_all() 方法还有一个限制参数。将 find_all() 的限制设置为 1 等价于 find()。

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

Using select() method

BeautifulSoup 类中的 select() 方法接受 CSS 选择器作为参数。# 符号是 id 的 CSS 选择器。然后将所需 id 的值传递给 select() 方法。它的工作方式与 find_all() 方法相同。

Example

from bs4 import BeautifulSoup

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

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

Output

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

Using select_one()

与 find_all() 方法一样,select() 方法也返回一个列表。还有一个 select_one() 方法可以返回给定参数的第一个标记。

Example

from bs4 import BeautifulSoup

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

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

Output

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