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>标签
相关推荐
望获linux6 分钟前
【Linux基础知识系列】第六十四篇 - 了解Linux的硬件架构
linux·运维·服务器·开发语言·数据库·操作系统·嵌入式软件
空中湖7 分钟前
PyTorch武侠演义 第一卷:初入江湖 第7章:矿洞中的计算禁制
人工智能·pytorch·python
Emma歌小白21 分钟前
**大数据量(几千万行)划分价格区间(价格段)
python
马哥python说44 分钟前
【效率软件】抖音转换工具:主页链接和抖音号一键批量互转
爬虫·python
江山如画,佳人北望1 小时前
pytorch常用函数
人工智能·pytorch·python
这里有鱼汤1 小时前
首个开源金融平台,一站式数据终端 + AI 代理,量化研究者的利器,速来白嫖
后端·python
这里有鱼汤1 小时前
Python量化实战:如何用Python实现查找相似K线,附源码,建议收藏
后端·python
1candobetter1 小时前
JAVA后端开发——用 Spring Boot 实现定时任务
java·开发语言·spring boot
小阿鑫1 小时前
使用 Kiro AI IDE 3小时实现全栈应用Admin系统
前端·后端·python·admin·kiro·next admin·fastapi admin
Blossom.1181 小时前
基于深度学习的医学图像分析:使用YOLOv5实现细胞检测
人工智能·python·深度学习·yolo·机器学习·分类·迁移学习