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 分钟前
Python类属性与魔术方法全解析
开发语言·python
yuhaiqun198923 分钟前
Typora 技能进阶:从会写 Markdown 到玩转配置 + 插件高效学习笔记
经验分享·笔记·python·学习·学习方法·ai编程·markdown
眠りたいです43 分钟前
现代C++:C++11并发支持库
开发语言·c++·多线程·c++11·c++并发支持库
小灰灰搞电子1 小时前
Rust可以取代C++么?
开发语言·c++·rust
我送炭你添花1 小时前
Pelco KBD300A 模拟器:06+2.Pelco KBD300A 模拟器项目重构指南
python·重构·自动化·运维开发
Swizard1 小时前
别再只会算直线距离了!用“马氏距离”揪出那个伪装的数据“卧底”
python·算法·ai
cat三三1 小时前
java之异常
java·开发语言
站大爷IP1 小时前
Python函数与模块化编程:局部变量与全局变量的深度解析
python
奇树谦1 小时前
【Qt实战】实现图片缩放、平移与像素级查看功能
开发语言·qt
我命由我123451 小时前
Python Flask 开发问题:ImportError: cannot import name ‘Markup‘ from ‘flask‘
开发语言·后端·python·学习·flask·学习方法·python3.11