1. 产品
  2.   HTML
  3.   Python
  4.   Beautiful Soup
 
  

开源 Python 库,用于解析 HTML/XML 并提取数据

Beautiful Soup 是领先的开源 Python 解析库,能够解析混乱的 HTML/XML,提取文本/链接,遍历树结构,并驱动现代网页抓取工作流。

什么是 Beautiful Soup?

网页抓取已成为数据科学家、开发者和研究人员的一项必备技能,他们需要从网站中提取有价值的信息。Beautiful Soup 是最受欢迎且用户友好的 Python 库之一,用于解析 HTML 和 XML 文档。自 2004 年创建以来,这个强大的工具为程序员在网页抓取项目中节省了无数时间。该库直观的 API、出色的文档以及活跃的社区支持,确保初学者和有经验的开发者都能高效地提取网页数据。

Beautiful Soup 是一个专门用于从 HTML 和 XML 文件中提取数据的 Python 库。自 2004 年以来,它作为强大的 Python 库,为程序员在网页抓取项目上节省了数小时甚至数天的工作量。只需几行代码,你就可以执行复杂的查询,例如简洁易用、查找所有链接、提取文本内容、自动编码转换、解析器灵活性、健壮的错误处理、在网页中搜索和提取链接等众多功能。

Beautiful Soup 库将从 HTML 和 XML 文档中提取数据的常常令人沮丧的任务转变为简洁的 Pythonic 过程,将结构不良的网页内容转换为整齐有序的解析树,你可以使用简单的方法进行导航和搜索。传统上需要数小时手动编码的工作,现在使用 Beautiful Soup 可以在几分钟内完成。它仍然是进入网页抓取领域的 Python 开发者的行业标准。其简易性结合不同解析器的强大功能,使其成为从静态网站提取数据的无可匹敌的选择。

Previous Next

开始使用 Beautiful Soup

推荐且最简便的安装 Beautiful Soup 方法是使用 pip。请使用以下命令进行顺利安装。

通过 pip 安装 Beautiful Soup 库

pip install beautifulsoup4 

您也可以手动安装;直接从 Beautiful Soup 网页下载最新发布文件。

使用多个解析器

Beautiful Soup 库本身并不完成所有解析——它是基于成熟的解析器之上,如 Python 内置的 html.parser、快速的 lxml 解析器以及类似浏览器的 html5lib。根据需求,您可以优先考虑速度或符合标准。该架构为您提供了灵活性,可选择最适合您需求的解析器,在解析速度与灵活性之间进行权衡,尝试不同的解析策略而无需更改 Beautiful Soup 代码,等等。下面的简易代码展示了开发者如何在 Beautiful Soup 中使用不同的解析器。

如何在 Python 应用中使用多个解析器来解析 HTML 文档?

# Using different parsers with Beautiful Soup
html_doc = "

示例内容

" # Using lxml parser (fast) soup_lxml = BeautifulSoup(html_doc, 'lxml') # Using html5lib parser (slower but more lenient) soup_html5lib = BeautifulSoup(html_doc, 'html5lib') # Using Python's built-in parser soup_builtin = BeautifulSoup(html_doc, 'html.parser')

从网页中提取链接

抓取链接是常见的网页抓取任务,特别适用于构建网络爬虫。开源的 Beautiful Soup 库已支持在 Python 应用中加载网页并提取其中的链接。下面的简单代码示例演示了使用 requests 库获取实时网页,然后在 Python 应用中提取所有锚点标签。

如何使用 Python 从网页中提取链接?

from bs4 import BeautifulSoup
import requests

# Fetch a real webpage
url = 'https://example.com'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')

# Extract all links
links = soup.find_all('a')

print(f"Found {len(links)} links:")
for link in links:
    href = link.get('href')
    text = link.get_text().strip()
    print(f"Text: {text} | URL: {href}")

# Filter links by criteria
external_links = []
for link in soup.find_all('a'):
    href = link.get('href')
    if href and href.startswith('http'):
        external_links.append(href)

print(f"\nFound {len(external_links)} external links")

搜索特定的 HTML 元素

Beautiful Soup 最大的优势之一是它能够自然地让你搜索 HTML,几乎像阅读普通英文一样。你无需处理复杂的 DOM API,只需描述你的需求,Beautiful Soup 就会为你找到相应内容。假设你想查找页面上的所有链接。你可以使用下面代码示例中展示的 find_all 方法。该方法返回所有链接标签的列表。随后我们遍历这些标签,提取 URL 和文本,以获取可见的链接名称,使用 Python API 实现。

如何通过 Python API 搜索并提取网页中的特定 HTML 元素?

# Extract all anchor tags
links = soup.find_all('a')

for link in links:
    href = link.get('href')
    text = link.text.strip()
    print(f"Text: {text} | URL: {href}")

自动编码处理

Beautiful Soup 最方便的功能之一是其自动编码转换。该库会自动将输入文档转换为 Unicode,将输出文档转换为 UTF-8,从而消除网页抓取中最常见的头疼问题之一。请记住,只有当文档未指定编码时才需要考虑编码,因为 Beautiful Soup 无法自动检测编码。在这些罕见情况下,您只需手动指定原始编码即可。

 中国人