寻找如何有效地和正确地使用BeautifulSoup的find_all方法?那么现在进来,发现不同的方法和用法,以便解析出您所需的数据。

BeautifulSoup在Python中的网络爬虫开发者中非常受欢迎。它与Python的requests或其他模块一起用于从网页上抓取数据。与你可能想的相反,BeautifulSoup本身并不是一个解析器。它包装了你选择的解析器(html.parser是默认选项)。为了帮助提取网页数据,BeautifulSoup具有易于使用的优点,因为你可以使用类似jQuery的API遍历HTML文档来提取所需数据。

BeautifulSoup提供的其中一种流行方法是find_all()方法。这是访问页面上元素及其内容的方法之一。其他方法包括find和select方法。

BeautifulSoup 中的 Find_all 是什么?

在BeautifulSoup中,find_all()方法是一种强大的提取方法,您可以使用它来查找与find_all方法中定义的查询参数匹配的HTML或XML文档中的所有元素。find接受您的查询,可以是元素的ID、类名、属性甚至正则表达式(REGEX)语句,并返回一个包含与查询匹配的元素的数组。

返回的只是一个数组中的元素。您需要遍历数组以访问特定元素并提取感兴趣的特定数据。虽然您可以将ID作为find_all方法() 的参数使用,但如果您只需要查找单个元素,则建议改用find() 方法—— find_all适用于查找多个元素,并不适合按照ID进行查找,因为ID应该是唯一且仅有一个。

如何在 Beautifulsoup 中使用 Find_all 方法

在本指南的这一部分中,我将向您展示如何使用 find_all 方法在页面上查找所需的元素。首先,为了让您专门登陆此页面,我假设您已经安装了 BeautifulSoup 库,并且知道如何将内容加载到其中来创建汤。因此,我将跳过该部分的所有内容。您将在这里学到的内容包括使用 find_all 方法按标签、类名、ID、文本字符串、多个条件和正则表达式语句查找元素。


通过标签名称查找元素

使用 find_all() 最简单的方法是使用元素标签名称来查找页面上的元素。假设您想要查找页面上的所有链接,您所需要做的就是提供锚元素作为参数,如下所示。

# Find all URLs on a page

URL_list = soup.find_all(“a”)

for URL in URL_list:

    print(URL.get_text())

您会喜欢 find_all 方法的一件事是,您可以对希望它收集的元素数量提供限制。您可以使用 limit 参数使其仅返回特定数量的项目,如下所示。

soup.find(‘a’, limit=10)

按类名或 ID 查找元素

如果元素分配有类名或 ID,则可以快速使用 find_all 方法来收集所有元素。但是,您输入的第一个参数应该是元素的标签名称。下面是如何使用 BeautifulSoup 的 find_all 方法在文档中按类名和 ID 查找元素。

# Find all tr elements with the class name as country

soup.find_all(‘tr’, class_=‘country’)

#find p element with ID actual_price

soup.find_all(‘p’, id=‘actual_price’)

注意:注意 class 后面带有 _ (class_) 的内容。这是因为 class 是 Python 中的反向关键字。另外,请记住我说过,即使您可以使用 find_all 方法通过 ID 查找元素,但最好使用 find() 方法,因为它更合适。

按属性查找元素

使用 find_all 方法的另一种方法是查找具有您知道的特定属性的元素。假设锚元素 (a) 的可见性元素设置为隐藏。以下是如何找到它们。这对于避免蜜罐陷阱特别有用。

soup.find_all(‘a’, attrs={‘visibility’: ‘hidden’})

通过文本和正则表达式查找元素

有时,您想要的只是该方法返回与特定文本字符串匹配的字符串列表。如果您知道该文本,则可以直接使用它或使用 REGEX 语句返回它。以下是如何完成它们。

import re

#find exact string of texts

soup.find_all(string=“call me”)

#find strings that contain ‘call me”

soup.find_all(string=re.compile(‘call me’))

关于 BeautifulSoup Find_All 的常见问题解答

问:BeautifulSoup Python 中的 Find 和 Find_all 有什么区别?

这两种方法都用于查找页面上的元素。但是,find() 方法用于仅返回它遇到的与查询匹配的第一个元素,而其他元素将被忽略。另一方面,find_all() 方法用于查找符合您的条件的所有元素。仅当您需要一个元素时才应该使用 find 元素,而当您需要多个项目时才应该使用 find_all 。

问:BeautifulSoup 中的 Select 和 Find_all 有什么区别?

BeautifulSoup 中的 select 方法还可用于查找 HTML 或 XML 文档中的元素,并返回一个列表。但是,它仅接受 CSS 选择器作为标准,这对于具有 Web 背景的人来说更容易。另一方面,Find_all 更高级,并且接受过滤器和更多参数。


结    论

从上面可以看到如何使用BeautifulSoup中的find_all()方法来查文档中与您的查询匹配的所有元素。如果您对此方法理解得很好,那么它非常容易使用。但作为结束指南的方式,我需要告诉您要注意页面内容加载多快,因为只有下载了页面内容才能帮助您看到BeautifulSoup中find_all方法的优点之处。

这篇文章有用吗?

点击星号为它评分!

平均评分 / 5. 投票数:

到目前为止还没有投票!成为第一位评论此文章。

No more articles