一、方法描述
在 BeautifulSoup 库中,find_all()
方法会在当前 PageElement
的子元素中寻找所有符合给定条件的元素,并返回这些元素的列表。
二、语法
Soup.find_all(name, attrs, recursive, string, **kwargs)
三、参数
-
-
-
recursive
:如果为 True
,则执行递归搜索;否则,仅考虑直接子元素。
-
-
四、返回类型
find_all()
方法返回一个 ResultSet
对象,这是一个列表生成器。
五、示例
示例 1
当我们为 name
参数传递一个值时,Beautiful Soup 只考虑具有特定名称的标签。文本字符串将被忽略,以及那些名称不匹配的标签。在这个例子中,我们将 title
传递给 find_all()
方法。
from bs4 import BeautifulSoup
html = open('index.html')
soup = BeautifulSoup(html, 'html.parser')
obj = soup.find_all('input')
print(obj)
输出:
[<input id="nm" name="name" type="text"/>, <input id="age" name="age" type="text"/>, <input id="marks" name="marks" type="text"/>]
示例 2
我们将使用以下 HTML 脚本来进行这个例子:
<html>
<body>
<h2>Departmentwise Employees</h2>
<ul id="dept">
<li>Accounts</li>
<ul id='acc'>
<li>Anand</li>
<li>Mahesh</li>
</ul>
<li>HR</li>
<ol id="HR">
<li>Rani</li>
<li>Ankita</li>
</ol>
</ul>
</body>
</html>
我们可以将一个字符串传递给 find_all()
方法的 name
参数。通过字符串,你可以搜索文本而不是标签。你可以传递一个字符串、一个正则表达式、一个列表、一个函数,或者 True
值。
在这个例子中,一个函数被传递到 name
参数。所有以 'A' 开头的名字都会被 find_all()
方法返回。
from bs4 import BeautifulSoup
def startingwith(ch):
return ch.startswith('A')
soup = BeautifulSoup(html, 'html.parser')
lst = soup.find_all(string=startingwith)
print(lst)
输出:
['Accounts', 'Anand', 'Ankita']
示例 3
在这个例子中,我们将 limit=2
参数传递给 find_all()
方法。该方法返回 <li>
标签的前两次出现。
soup = BeautifulSoup(html, 'html.parser')
lst = soup.find_all('li', limit=2)
print(lst)
输出:
[<li>Accounts</li>, <li>Anand</li>]