BeautifulSoup的find方法是您可以用来解析和提取网页文档中所需数据的方法之一。现在就进来学习如何有效地从网络中提取数据。

对于一些网络目标,只需要使用请求+BeautifulSoup的方式就可以轻松地爬取所需的库。BeautifulSoup很好地封装了您选择的解析器(或其自己选择的解析器),以帮助提取页面上的数据。它支持多种识别和提取数据的方法,从CSS选择器soup.select()方法到soup.find_all和soup.find等方法都有支持。这并不是一个终极指南来进行数据提取。本文主要关注于soup.find()方法。您将学习到关于soup.find方法及如何使用它所需知道的一切内容。

BeautifulSoup 中的 Soup.find 是什么?

soup.find() 方法可以在 BeautifulSoup 库中找到。此方法用于 BeautifulSoup 对象来查找与其参数匹配的元素。如果您需要查找某个元素,则可以使用其 ID、元素标签或类等来确定该元素是唯一的。如果当满足条件的元素数量超过一个时使用它来查找元素,则仅返回第一个元素 – 其他元素将被忽略。

find 方法与 find_all 方法有很大不同,find_all 方法返回元素列表,因为 find 方法仅返回一个元素。那么,为什么您需要迭代结果才能找到感兴趣的元素,就像 find_all 的情况一样,如果它可用,您可以立即对其进行操作,否则它将返回 None。


如何使用BeautifulSoup中的Soup.Find方法

现在您知道了该方法是什么,现在是时候了解如何使用它来查找所需的数据了。首先,为了登陆此页面,我希望您的计算机上已经安装了 BeautifulSoup。如果您还没有这样做,那么您可以阅读我们的 BeautifulSoup 安装指南。它非常简单,因为 BeautifulSoup 在 PyPi 上可用,并且可以使用 pip install 命令进行安装。

如前所述,find 方法用于仅查找页面上的一个元素或项目。当多个元素满足查询时,该工具将仅返回第一个元素 – 因此在使用 find 方法之前,请务必充分了解要抓取的页面。以下是使用 soup.find() 方法查找元素的方法。


按标签名称查找元素

如果页面上的目标在标签方面是唯一的,也就是说,它不与任何其他元素共享标签,那么抓取它就很容易。举例来说,如果您只有一个表元素,您可以使用 find 方法轻松定位它,而无需编写任何复杂的代码。下面是使用 BeautifulSoup find 方法执行此操作的代码。

#find table elements

…

soup = BeautifulSoup(page_html)

table_element = soup.find(“table”)

print(table_element)

正如您在上面看到的,我只提供了表标签名称作为参数,它返回了它。如果有两个表,它将仅返回遇到的第一个表。


按类或 ID 名称查找元素

在设计网页时,页面元素会被分配 ID 和类名称,以用于样式和交互目的。您可以在网络抓取时在自己的一端使用它。这样,您可以决定省略标签名称,而仅使用类名称或 ID。但是,最好指定标签名称以使其更有效。下面是如何使用 find element 通过其 ID 或类名来获取元素。

soup = BeautifulSoup(page_html)

#find element by ID

eID = soup.find(“a”, id=“price_link”)

#find element by class name

eClassName = soup.find(“tr”, class_=“product-items”)

print(eID)

print(eClassName)

在上面的代码中,你可以看到我给类(class_)添加了一个下划线。这是因为它是 Python 中的关键字并且是不允许的。


soup.find(‘a’, attrs={‘color’: ‘red’})

按属性查找元素

查找元素的另一种方法是使用其属性。假设您想查找颜色为红色的链接元素,您可以使用 find 方法。下面是有关如何完成此操作的代码。


BeautifulSoup查找方法常见问题解答

问:当find方法找不到元素时会发生什么?

如果你想要的元素在名称上没有找到,find方法将不会返回错误 – 它将返回None。然而,当你尝试对结果进行操作时,异常将被引发。因为返回的结果是None,如果你尝试从中获取任何细节或者甚至对其进行操作,你只会遇到异常。为了避免这种情况,请始终检查元素返回的类型,并确保它得到了一个元素后再决定是否采取行动。

问:在BeautifulSoup中使用Find的最佳场景是什么?

当您想要查找一个您知道具有唯一类、ID或属性的元素时,find方法是最好用的。如果它与其他任何元素共享其中之一,则除非它与此共享的元素没有相同的标签名字,否则find就不是最佳方法。如果忽略这一点,可能会得到错误的元素作为结果,并且它将返回第一个遇到的元素。

问:BeautifulSoup中Find和Find_All之间有什么区别?

从名称上可以看出,find用于查找单个元素, find_all用于查找多个元件. Find将返回所需求 的 元件 ,并且您可以立即开始对其进行操作 。至于 find_all 元件 ,即使只有一个 元件 也会向您 返回 列表 。在使用此方法时,请记住这一点。

结    论

find方法与select和find_all方法一起,是为了让您能够访问元素并从中提取数据而提供的方法。从上面可以看出,find实际上是一个易于使用的方法。然而,在使用时需要小心,因为如果您要查找的元素在页面上不唯一,可能会得到错误的元素。

这篇文章有用吗?

点击星号为它评分!

平均评分 / 5. 投票数:

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

No more articles