Python 爬虫(5)Beautiful Soup 4 实战

文章目录

前言:

在网络数据处理与分析的领域里,网页数据提取是极为关键的一环。Python 作为一种功能强大且广受欢迎的编程语言,为开发者们提供了众多实用的库来处理这类任务,其中 BeautifulSoup 便是一款在网页数据提取方面表现卓越的库。

一、Beautiful Soup实战

1、什么是 Beautiful Soup ?

BeautifulSoup 是一个用于从 HTML 或 XML 文件中提取数据的 Python 库。它可以将复杂的 HTML 或 XML 文档转化为树形结构,使得开发者能够轻松地遍历、搜索和修改文档内容。借助 BeautifulSoup,我们能够迅速定位到所需的数据,如特定的标签、属性或文本信息。主要特点:

  • 自动将输入文档转换为Unicode编码,输出文档转换为UTF-8编码。
  • 支持多种解析器(如lxml、html5lib等)。
  • 提供简单易用的导航、搜索和修改文档树的方法。
  • 能够处理不规范的HTML文档。

2、安装

执行下面的命令进行安装

python 复制代码
pip install beautifulsoup4

3、解析器

Beautiful Soup 支持多种解析器,每种解析器有不同的特点和适用场景。以下是主要的解析器及其差异对比。

解析器 安装方式 速度 容错性 依赖 适用场景
Python标准库 html.parser 内置,无需安装 中等 中等 简单项目,不需要额外依赖
lxml的HTML解析器 lxml pip install lxml lxml库 大多数情况下的首选
lxml的XML解析器 xml pip install lxml 严格 lxml库 解析严格的XML文档
html5lib html5lib pip install html5lib 非常好 html5lib库 解析不规范HTML,模拟浏览器行为

4、创建 Beautiful Soup 对象

创建 Beautiful Soup 对象时大多数情况下只需要关注markupfeatures参数,其他参数用于处理特殊情况。

  • markup 参数(必需)

    • 作用:指定要解析的文档内容

    • 可接受类型

      • 字符串形式的HTML/XML内容
      • 文件对象(如通过open()打开的文件)
      • URL响应内容(如requests库获取的响应)
    • 示例

      python 复制代码
      # 从字符串创建
      html_str = "<html><body><p>Hello World</p></body></html>"
      soup = BeautifulSoup(html_str, 'html.parser')
      
      # 从文件创建
      with open('index.html') as f:
          soup = BeautifulSoup(f, 'html.parser')
      
      # 从网页响应创建
      import requests
      response = requests.get('http://example.com')
      soup = BeautifulSoup(response.text, 'html.parser')
  • features 参数(推荐指定)

    • 作用:指定使用的解析器类型

    • 常用选项

      • 'html.parser':Python内置解析器(无需安装额外库)
      • 'lxml':lxml的HTML解析器(速度快,推荐使用)
      • 'xml':lxml的XML解析器
      • 'html5lib':容错性最好的HTML解析器
    • 示例

      python 复制代码
      # 使用不同解析器
      soup1 = BeautifulSoup(html_str, 'html.parser')  # 内置解析器
      soup2 = BeautifulSoup(html_str, 'lxml')        # 推荐使用的lxml解析器
      soup3 = BeautifulSoup(xml_str, 'xml')          # 解析XML文档
      soup4 = BeautifulSoup(bad_html, 'html5lib')    # 处理不规范HTML

5、选择器

通过选择器来定位节点以及获取节点对应的值,常见的选择器有下面几种

5.1、节点选择器

  • 通过标签名直接访问

    python 复制代码
    soup.title  # 获取第一个<title>标签
    soup.p  # 获取第一个<p>标签
  • find() 方法

    python 复制代码
    soup.find('div')  # 查找第一个<div>标签
    soup.find('a', class_='external')  # 查找第一个class为external的<a>标签
  • find_all() 方法

    python 复制代码
    soup.find_all('li')  # 查找所有<li>标签
    soup.find_all('span', {'class': 'highlight'})  # 查找所有class为highlight的<span>标签
相关推荐
默_笙2 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
qq_426003962 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
虎头金猫2 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
长沙三为智能科技2 天前
家政小程序开发从0到上线:五阶段交付流程与验收清单
python
伞伞悦读2 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
只睡四小时2 天前
Canvas 弹道联机实战:700 行 + 固定时间步长
python·websocket·html5·游戏开发·canvas
C语言小火车2 天前
C/C++ 为什么需要编译器?
开发语言·c++
奇思妙想聪明勤奋的小羊2 天前
DeepAgents第5章:子Agent 与上下文隔离—让 Agent学会委派
人工智能·python·学习·语言模型
lpfasd1232 天前
2026年第38周GitHub趋势周报
python·科技·github