ThankNeko's Blog ThankNeko's Blog
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)

Hoshinozora

尽人事,听天命。
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)
  • Python笔记

    • 基础知识

    • 并发编程

    • 爬虫笔记

      • 爬虫相关介绍
      • Requests模块
      • BeautifulSoup模块
        • BeautifulSoup模块
          • 介绍
          • 相关对象
          • 模块使用
      • Xpath模块
      • DrissionPage模块
      • JS逆向基础
    • 模块笔记

    • 后端笔记

  • C笔记

  • C++笔记

  • Arduino笔记

  • Web笔记

  • Dev
  • Python笔记
  • 爬虫笔记
Hoshinozora
2025-11-01
目录

BeautifulSoup模块

# BeautifulSoup模块

# 介绍

BeautifulSoup是一个可以从Html或XML文件中提取数据的Python库,可以实现文档节点的导航、查找、修改等DOM操作。

# 相关对象

# BeautifulSoup对象

当使用Beautiful Soup解析一个HTML或XML文档时,会得到一个BeautifulSoup对象,它代表整个解析后的HTML文档,是最顶层的对象。 它包含了整个文档的全部内容,并提供了操作HTML文档的方法和属性。

可以通过BeautifulSoup对象来访问和搜索文档中的其他对象,如Tag、NavigableString和Comment。

# Tag对象

Tag 对象对应于HTML或XML文档中的标签。例如,在<p>This is a paragraph.</p>中,<p>和</p>是标签,它们会被解析为Tag对象。

每个Tag对象都有名称和属性,可以通过Tag.name和Tag.attrs来访问。

此外,Tag对象还可以包含其他Tag对象、NavigableString对象或Comment对象,这些可以通过Tag.contents和Tag.children等属性来访问。

Tag的属性可以被添加、删除或修改,tag的属性操作方法与字典一样。

# NavigableString对象

NavigableString对象代表标签之间的文本内容。

在上面的例子中,"This is a paragraph."就是一个NavigableString对象。

与普通的Python字符串不同,NavigableString对象可以与文档中的其他部分(如Tag对象)进行交互和搜索。

# Comment对象

Comment对象代表HTML或XML文档中的注释。在HTML中,注释以<!--开始,以-->结束,这些注释在解析时会被转换为Comment对象。

与Tag和NavigableString对象类似,Comment对象也是文档树的一部分,可以通过Beautiful Soup进行搜索和访问。

# 模块使用

# 安装与导入

# 安装
pip install BeautifulSoup4

# 导入
from bs4 import BeautifulSoup
1
2
3
4
5

# HTML解析器

HTML解释器是把HTML文本转换成可遍历的树形结构的工具,进而可以方便地进行节点查找、属性获取、文本抽取和文档修改。

# lxml解析器安装
pip install lxml

# html5lib解析器安装
pip install html5lib
1
2
3
4
5
解析器 使用方法 优势 劣势
Python标准库 BeautifulSoup(markup, "html.parser") Python的内标准库
执行速度适中
文档容错能力强
Python 2.7.3 or 3.2.2前的版本容错能力差
lxml HTML解析器 BeautifulSoup(markup, "lxml") 速度快
文档容错能力强
需要安装C语言库
Ixml XML解析器 BeautifulSoup(markup, ["lxml-xml"])
BeautifulSoup(markup, "xml")
速度快
唯一支持XML的解析器
需要安装C语言库
html5lib BeautifulSoup(markup, "html5lib") 最好的容错性
浏览器的方式解析文档
生成HTML5格式的文档
速度慢
不依赖外部扩展

# BeautifulSoup对象操作

# 实例化BeautifulSoup对象并解析文档,解析器直接指定名称即可
soup = BeautifulSoup(res.text, "lxml")
1
2

# Tag对象操作

## 查找标签,可以通过节点路径"soup.标签名.标签名..."进行查找
# head标签
soup.head
# title标签
soup.title
# 第一个p标签下的第一个b标签
soup.p.b

# 查找标签属性值,可以通过"soup.标签名.属性名"获取到属性对应的值
# 第一个a标签的name属性值
soup.a.name
# 第一个p标签下的第一个b标签的name属性值
soup.p.b.name
# 第一个a标签的href属性值
soup.a["href"]
# 第一个a标签的所有属性键值对
soup.a.attrs
# 第一个a标签的class属性值,多值属性的返回类型是list
soup.a["class"]

# 获取当前标签及其子标签的所有文本内容
soup.p.strings

# 获取当前标签的文本内容
soup.p.string
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

# 文档树操作

# 得到一个迭代器,包含p下所有子节点
soup.p.children

# 得到一个迭代器,包含p下所有的标签(子孙节点)
soup.p.descendants

# a标签的父节点
soup.a.parent

# a标签的所有祖先节点
soup.a.parents

# a标签的下一个兄弟节点
soup.a.next_sibling

# 得到一个迭代器,包含a标签的下面所有兄弟节点
soup.a.next_siblings

# a标签的上一个兄弟节点
soup.a.previous_sibling

# 得到一个迭代器,包含a标签的上面所有兄弟节点
soup.a.previous_sibling


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# find()方法

[soup/tag].find_all() BeautifulSoup或Tag对象的查找方法,会根据参数条件,查找第一个符合的标签对象并返回,未匹配则返回None。

参数同下面的find_all()一样,除了没有limit参数。

# find_all()方法

[soup/tag].find_all() BeautifulSoup或Tag对象的查找方法,会根据参数条件,查找所有符合的标签对象并通过列表返回,未匹配则返回空列表。

常用参数

name:要查找的标签名,可是字符串、正则表达式或列表。若不指定则匹配所有标签。

soup.find_all('a')

attrs:用字典或关键字参数指定标签属性过滤。

soup.find_all('div', attrs={'class':'item'})

*kwargs:关键字过滤属性,与attrs等价。

soup.find_all(href=True)

soup.find_all('span', class_='highlight')

class为了避免和python关键字冲突,需要写成class_

recursive:是否递归搜索子孙节点。True会搜索全部子代(默认),False则只会在直接子节点中查找。

soup.body.find_all('a', recursive=False)

string / text:按标签内部的文字内容过滤,可传字符串、正则或函数。

soup.find_all(text='首页')

limit:限制返回结果的数量。limit=1 的效果等同于find()。

soup.find_all('p', limit=3)

# CSS选择器选择标签

通过soup.select()函数可以实现CSS选择来选择标签。

# 例如:
soup.select("title")
soup.select("body a")
soup.select("p > a")
soup.select('a[href^="http://example.com/"]')
soup.select('#list-2 h1')[0].attrs
soup.select('#list-2 h1')[0].get_text()
1
2
3
4
5
6
7
#爬虫#beautifulsoup
Requests模块
Xpath模块

← Requests模块 Xpath模块→

最近更新
01
Vue路由
12-09
02
FastAPI实现用户管理
11-23
03
Tortoise ORM
11-23
更多文章>
Theme by Vdoing | Copyright © 2022-2026 Hoshinozora | MIT License
湘ICP备2022022820号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式