Beautiful Soup - 从 HTML 中抓取列表



网页通常以有序或无序列表的形式包含重要的数据。使用 Beautiful Soup,我们可以轻松地提取 HTML 列表元素,将数据转换为 Python 对象,并存储在数据库中以进行进一步分析。在本章中,我们将使用 find() 和 select() 方法从 HTML 文档中抓取列表数据。

搜索解析树的最简单方法是按其名称搜索标签。soup.<tag> 获取给定标签的内容。

HTML 提供 <ol> 和 <ul> 标签来编写有序和无序列表。像任何其他标签一样,我们可以获取这些标签的内容。

我们将使用以下 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>

按标签抓取列表

在上面的 HTML 文档中,我们有一个顶级 <ul> 列表,在其内部还有一个 <ul> 标签和另一个 <ol> 标签。我们首先将文档解析到 soup 对象中,并检索 soup.ul Tag 对象中第一个 <ul> 的内容。

示例

from bs4 import BeautifulSoup

fp = open('index.html')

soup = BeautifulSoup(fp, 'html.parser')

lst=soup.ul

print (lst)

输出

<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>

更改 lst 的值以指向 <ol> 元素以获取内部列表。

lst=soup.ol

输出

<ol id="HR">
<li>Rani</li>
<li>Ankita</li>
</ol>

使用 select() 方法

select() 方法主要用于使用 CSS 选择器获取数据。但是,您也可以向其传递标签。在这里,我们可以将 ol 标签传递给 select() 方法。select_one() 方法也可用。它获取给定标签的第一个匹配项。

示例

from bs4 import BeautifulSoup

fp = open('index.html')

soup = BeautifulSoup(fp, 'html.parser')

lst=soup.select("ol")

print (lst)

输出

[<ol id="HR">
<li>Rani</li>
<li>Ankita</li>
</ol>]

使用 find_all() 方法

find() 和 fin_all() 方法更全面。您可以将各种类型的过滤器(例如标签、属性或字符串等)传递给这些方法。在这种情况下,我们希望获取列表标签的内容。

在以下代码中,find_all() 方法返回 <ul> 标签中所有元素的列表。

示例

from bs4 import BeautifulSoup

fp = open('index.html')

soup = BeautifulSoup(fp, 'html.parser')

lst=soup.find_all("ul")

print (lst)

我们可以通过包含 attrs 参数来细化搜索过滤器。在我们的 HTML 文档中,<ul> 和 <ol> 标签已指定了各自的 id 属性。因此,让我们获取具有 id="acc" 的 <ul> 元素的内容。

示例

from bs4 import BeautifulSoup

fp = open('index.html')

soup = BeautifulSoup(fp, 'html.parser')

lst=soup.find_all("ul", {"id":"acc"})

print (lst)

输出

[<ul id="acc">
<li>Anand</li>
<li>Mahesh</li>
</ul>]

这是另一个示例。我们收集所有带有 <li> 标签的元素,其内部文本以“A”开头。find_all() 方法接受一个关键字参数字符串。如果 startingwith() 函数返回 True,则它将获取文本的值。

示例

from bs4 import BeautifulSoup

def startingwith(ch):
   return ch.startswith('A')

fp = open('index.html')

soup = BeautifulSoup(fp, 'html.parser')

lst=soup.find_all('li',string=startingwith)

print (lst)

输出

[<li>Accounts</li>, <li>Anand</li>, <li>Ankita</li>]
广告

© . All rights reserved.