📜  使用 BeautifulSoup 解析表格和 XML(1)

📅  最后修改于: 2023-12-03 14:49:37.540000             🧑  作者: Mango

使用 BeautifulSoup 解析表格和 XML

BeautifulSoup 是一个功能强大的 Python 库,用于解析 HTML 和 XML 文档。在数据挖掘和爬虫方面,它特别有用。它可以帮助您轻松解析复杂的 HTML 和 XML 文档,找到您需要的数据并提取出来。

本文将介绍如何使用 BeautifulSoup 解析表格和 XML。

解析表格

要解析 HTML 表格,首先需要将 HTML 文档作为输入传递给 BeautifulSoup。假设我们有以下 HTML 表格:

<table>
  <tr>
    <th>Name</th>
    <th>Age</th>
    <th>Gender</th>
  </tr>
  <tr>
    <td>John</td>
    <td>27</td>
    <td>Male</td>
  </tr>
  <tr>
    <td>Jane</td>
    <td>25</td>
    <td>Female</td>
  </tr>
</table>

我们可以使用以下 Python 代码来解析上述表格:

from bs4 import BeautifulSoup

html_doc = """
<table>
  <tr>
    <th>Name</th>
    <th>Age</th>
    <th>Gender</th>
  </tr>
  <tr>
    <td>John</td>
    <td>27</td>
    <td>Male</td>
  </tr>
  <tr>
    <td>Jane</td>
    <td>25</td>
    <td>Female</td>
  </tr>
</table>
"""

soup = BeautifulSoup(html_doc, 'html.parser')
table = soup.find('table')

# 获取表格标题
headers = []
for th in table.find_all('th'):
    headers.append(th.text)
print(headers)

# 获取表格数据
rows = []
for tr in table.find_all('tr'):
    row = []
    for td in tr.find_all('td'):
        row.append(td.text)
    if row:
        rows.append(row)
print(rows)

输出结果如下:

# 获取表格标题
['Name', 'Age', 'Gender']

# 获取表格数据
[
  ['John', '27', 'Male'],
  ['Jane', '25', 'Female']
]
解析 XML

XML 是一种常用的半结构化数据格式,它比 HTML 更通用。虽然 BeautifulSoup 最初是为解析 HTML 而设计的,但它也可以用于解析 XML。假设我们有以下 XML 文档:

<persons>
  <person>
    <name>John</name>
    <age>27</age>
    <gender>Male</gender>
  </person>
  <person>
    <name>Jane</name>
    <age>25</age>
    <gender>Female</gender>
  </person>
</persons>

我们可以使用以下 Python 代码来解析上述 XML 文档:

from bs4 import BeautifulSoup

xml_doc = """
<persons>
  <person>
    <name>John</name>
    <age>27</age>
    <gender>Male</gender>
  </person>
  <person>
    <name>Jane</name>
    <age>25</age>
    <gender>Female</gender>
  </person>
</persons>
"""

soup = BeautifulSoup(xml_doc, 'xml')
persons = soup.find_all('person')

# 获取每个 Person 实例的属性和文本节点
for person in persons:
    print(person.name.text)
    print(person.age.text)
    print(person.gender.text)

输出结果如下:

John
27
Male
Jane
25
Female

可以看到,我们还可以像解析 HTML 一样轻松地解析 XML 文档。

到此为止,您已经学会了使用 BeautifulSoup 解析表格和 XML 文档。这是数据挖掘和爬虫方面的重要基础知识。希望这篇文章对您有所帮助!