寻找如何有效地和正确地使用BeautifulSoup的find_all方法?那么现在进来,发现不同的方法和用法,以便解析出您所需的数据。
BeautifulSoup在Python中的网络爬虫开发者中非常受欢迎。它与Python的requests或其他模块一起用于从网页上抓取数据。与你可能想的相反,BeautifulSoup本身并不是一个解析器。它包装了你选择的解析器(html.parser是默认选项)。为了帮助提取网页数据,BeautifulSoup具有易于使用的优点,因为你可以使用类似jQuery的API遍历HTML文档来提取所需数据。
BeautifulSoup提供的其中一种流行方法是find_all()方法。这是访问页面上元素及其内容的方法之一。其他方法包括find和select方法。
BeautifulSoup 中的 Find_all 是什么?
返回的只是一个数组中的元素。您需要遍历数组以访问特定元素并提取感兴趣的特定数据。虽然您可以将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方法的优点之处。