Beautiful Soup 是一个 用于从 HTML 和 XML 文件中提取数据的 Python 第三方库。它为复杂的网页结构提供了简单易用的解析接口,尤其适合网页爬虫和数据提取任务。Beautiful Soup 提供树型结构访问、标签搜索、属性提取等功能,并支持多种解析器(如 html.parser、lxml、html5lib)。

底层原理是将网页结构转为“导航树”,用户可以像操作 DOM 一样获取任意节点信息。

安装:

pip install beautifulsoup4

常见应用场景:

(1)网页爬虫中的 HTML 内容解析。

(2)网页结构分析与标签提取。

(3)XML 数据解析。

(4)网站信息清洗与提取(如新闻、价格、评论等)。

(5)教学演示 HTML/XML 树结构解析过程。

  ◆  ◆

核心概念

1、BeautifulSoup 对象

将 HTML 文本转化为树形结构的解析对象,是所有操作的入口。

2、标签(Tag)

对应 HTML/XML 中的每个元素节点。

3、NavigableString

HTML 中的文本部分。

4、属性字典(attrs)

标签的属性信息(如 href,class 等)。

5、解析器选择

支持内建的 html.parser,以及更强大的 lxml、html5lib。

  ◆  ◆

应用举例

例 1:基本解析和标签获取

from bs4 import BeautifulSoup
html_doc = """<html><head><title>Example</title></head><body><p class="title"><a href="http://example.com">Example Link</a></p></body></html>"""
soup = BeautifulSoup(html_doc, 'html.parser')print(soup.title)         # 输出:<title>Example</title>print(soup.title.string)  # 输出:Exampleprint(soup.a['href'])     # 输出:链接地址

例 2:查找所有特定标签

from bs4 import BeautifulSoup
html_doc = """<html><head><title>Example</title></head><body><p class="title"><a href="http://example.com">Example Link</a></p></body></html>"""
soup = BeautifulSoup(html_doc, 'html.parser')links = soup.find_all('a')for link in links:    print(link.get('href'))    # 输出:http://example.com

例 3:使用 CSS 选择器查找元素

from bs4 import BeautifulSoup
html_doc = """<html><head><title>Example</title></head><body><p class="title"><a href="http://example.com">Example Link</a></p></body></html>"""
soup = BeautifulSoup(html_doc, 'html.parser')items = soup.select("p.title a")  # 类似 jQuery 的语法for item in items:    print(item.text)    # 输出:Example Link

例 4:提取属性、类名、ID

from bs4 import BeautifulSoup
html_doc = """<html><head><title>Example</title></head><body><p class="title"><a href="http://example.com">Example Link</a></p></body></html>"""
soup = BeautifulSoup(html_doc, 'html.parser')tag = soup.find('p', class_='title')print(tag['class'])       # 输出:['title']print(tag.get('class'))   # 同上

例 5:遍历父节点、子节点、兄弟节点

from bs4 import BeautifulSoup
html_doc = """<html><head><title>Example</title></head><body><p class="title"><a href="http://example.com">Example Link</a></p></body></html>"""
soup = BeautifulSoup(html_doc, 'html.parser')a_tag = soup.a                  # 相当于 soup.find("a")print(a_tag.parent.name)        # 父标签print(a_tag.next_sibling)       # 下一个兄弟节点

  ◆  ◆

常用方法与属性

BeautifulSoup(markup, parser)

构建解析对象。

参数:

markup:HTML/XML 字符串或文件对象

parser:解析器类型(如 'html.parser', 'lxml')

返回:BeautifulSoup 对象

find(name, attrs, recursive, string, **kwargs)

查找第一个匹配的标签。

参数:

name:标签名

attrs:属性字典

string:文本内容匹配

返回:Tag 对象或 None

find_all(name, attrs, string, limit, **kwargs)

查找所有匹配标签。

参数:

同上,可加 limit 限制个数

返回:包含多个 Tag 的列表(list)

select(selector)

使用 CSS 选择器查找节点。

参数:

selector:如 "div > a.title"

返回:符合条件的 Tag 列表(list)

get_text(strip=False)

获取标签内所有文本。

参数:

strip:是否去除首尾空白

返回:字符串

contents / children

访问子节点。

返回:

contents 是列表

children 是生成器

parent / parents

访问父节点或所有祖先节点。

返回:Tag 或迭代器

next_sibling / previous_sibling

访问兄弟节点。

返回:Tag 或文本节点

attrs

访问标签属性。

返回:字典 {属性名: 属性值}

  ◆  ◆

补充说明

1、推荐解析器:

html.parser(标准库,自带)

lxml(速度快,需安装)

html5lib(容错性最好,最接近浏览器行为)

安装方法:

pip install beautifulsoup4 lxml

2、配合 requests 使用是最常见的爬虫组合:

import requestsfrom bs4 import BeautifulSoup
url = "https://example.com"html = requests.get(url).textsoup = BeautifulSoup(html, "lxml")

图片

“点赞有美意,赞赏是鼓励”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/94777.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/94777.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/94777.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用STM32CubeMX使用CAN驱动无刷电机DJI3508

简介 文章为笔记性质 硬件包括 大疆C板 电机调速器C620 DJI3508电机 CAN知识介绍 CAN的概念 CAN是控制器区域网络&#xff08;Controller Area Network&#xff09;的缩写。CAN总线是一种适用于工业设备的高性能总线网络。说白了就是也就是一种通讯方式而已。 把多个设…

Wi-Fi 802.11s自组网/EasyMesh自组网/802.11ah物联网

一、前期调研结论 前面详细探讨了自组网和5G无线通信网络、WiFi无线通信网络的差异&#xff1a; 自组网 v.s 5G v.s WiFi-CSDN博客 从“分级道路”角度理解无线通信网络拓扑包括从当前工业应用场景具体案例了解终端无线通信网络&#xff1a; 5G无线通信网络场景&#xff08;…

【基于hyperledger fabric的教育证书管理系统】

教育证书管理系统 系统概述 项目背景 随着数字化转型的深入推进&#xff0c;教育证书作为个人学术成就和专业资质的重要凭证&#xff0c;在就业市场、高等教育和职业发展中扮演着关键角色。然而&#xff0c;传统教育证书管理体系面临着数据孤岛、证书伪造、验证流程繁琐以及跨机…

【Flask】测试平台开发,集成禅道

概述&#xff1a; 由于公司多数测试人员还是在使用禅道&#xff0c;为了方便&#xff0c;就将禅道直接集成在我们的测试平台中 一般可以有几种实现方法 调用禅道的API集成集成本地部署的禅道-可能有跨域问题&#xff0c;需要解决 由于我这里已经部署了一台本地的禅道系统&…

《UE5_C++多人TPS完整教程》学习笔记45 ——《P46 待机与跳跃(Idle And Jumps)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P46 待机与跳跃&#xff08;Idle And Jumps&#xff09;》 的学习笔记&#xff0c;该系列教学视频为计算机工程师、程序员、游戏开发者、作家&#xff08;Engineer, Programmer, Game Developer, Author&#xff09; St…

用html+js下拉菜单的demo,当鼠标点击后展开,鼠标点击别的地方后折叠

使用html js实现下拉菜单demo&#xff0c;因为copy的网站菜单功能失效&#xff0c;就需要自己写一个逻辑&#xff0c;点击其他区域折叠菜单&#xff0c;可以参考&#xff1a;<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF…

OpenCV 核心技术:颜色检测与几何变换实战

在计算机视觉任务中&#xff0c;颜色空间转换和图像几何变换是两大基础且高频的操作 —— 前者用于精准分割特定颜色目标&#xff08;如交通信号灯、物体追踪&#xff09;&#xff0c;后者用于调整图像的尺寸、位置和视角&#xff08;如文档矫正、图像拼接&#xff09;。本文将…

[HFCTF2020]EasyLogin

文章目录TRYWP总结TRY 注册admin报错username wrong。 随便注册一个用户点击GetFlag&#xff0c;permission deny。 猜测可能是需要admin权限。 看cookie发现有&#xff1a; sses:aok&#xff1a;eyJ1c2VybmFtZSI6ImEiLCJfZXhwaXJlIjoxNzU2NDU1NjczMTAxLCJfbWF4QWdlIjo4NjQwM…

Java接口和抽象类的区别,并举例说明

Java接口和抽象类是面向对象编程中实现抽象的两种机制&#xff0c;它们在语法、设计目的和使用场景上有显著区别&#xff1a;一、核心区别‌定义方式‌抽象类&#xff1a;使用abstract class声明&#xff0c;可包含抽象方法和具体方法45。接口&#xff1a;使用interface声明&am…

docker-相关笔记

1: 导入镜像 docker load -i myimage.tar# 导出镜像 docker save myimage:latest > myimage.tar # 导入镜像 docker load -i myimage.tardocker load -i <文件> 功能&#xff1a;用于导入通过 docker save 命令导出的镜像归档文件&#xff08;通常是 .tar 格式&#…

自然语言提取PDF表格数据

自然语言提取PDF表格数据PDF v8.2的文档解决方案与OpenAI实现了无缝的AI集成&#xff0c;可将非结构化PDF转换为可用数据。MESCIUS 推出的 PDF 文档解决方案 (DsPdf) 是一款软件开发工具包&#xff0c;它提供了 .NET Core 库和一个 JavaScript PDF 查看器&#xff0c;用于处理和…

飞牛Nas每天定时加密数据备份到网盘,基于restic的Backrest笔记分享

1. 前言 受前辈“RAID≠备份”的经验&#xff0c;也考虑到硬盘故障时 RAID 重建步骤繁琐&#xff0c;我干脆放弃阵列&#xff0c;直接单盘运行。 重要数据则加密后上传至大厂云盘&#xff1a;一方面文件对外不可读&#xff0c;规避扫描和谐&#xff1b;另一方面依靠大厂的数据安…

C#连接SQL-Server数据库超详细讲解以及防SQL注入

C#连接SQL Server数据库完整指南&#xff0c;整合了ADO.NET原生连接与Entity Framework Core两种实现方式。这篇文件详细介绍C#代码连接数据库的通用操作数据库链接功能 数据库的增删改查操作1 配置全局数据库链接字符串 App.config2 获取数据库链接字符串先在App.config配置连…

Pico2‑ICE FPGA 开发板:从开箱到跑通示例的全历程

FPGA 和 MCU 结合的开发板不多&#xff0c;而 Pico2‑ICE 则把小巧、灵活和易上手完美结合。搭载 RP2350 双核 RISC-V MCU Lattice iCE40UP5K FPGA&#xff0c;配合官方 SDK&#xff0c;你可以一步步跑通各种示例&#xff0c;从 LED 到 VGA&#xff0c;再到 MCU 与 FPGA 协作应…

Java图形图像处理【Swing图像拖拽】【五】

Java图形图像处理【Swing图像拖拽】 18.3.3 Swing图像对象拖拽功能 18.3.3 Swing图像对象拖拽功能 上文讨论的是java.awt.dnd包中提供的拖拽API接口&#xff0c;也可称之为AWT组件的拖拽功能。下面我们要讨论的是Swing框架的拖拽功能&#xff1a;Swing组件也提供了对拖拽功能的…

状态模式与几个经典的C++例子

1. 状态模式定义与核心思想 状态模式解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。通过将状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。 核心思想: 状态抽象:将对象的每个状态都封装到一个独立的类中。 委托代替条件判断:…

SyncBackPro 备份及同步软件中的脚本功能简介

脚本提供了一种灵活而简单的方法来自动执行任务和扩展应用程序的功能。脚本是一个小程序&#xff0c;能够自定义和控制备份作业。例如&#xff0c;用户可以编写脚本来复制、重命名或删除特定文件、自定义用户界面或更改配置文件设置。SyncBackPro 的脚本功能类似于 Microsoft O…

部署2.516.2版本的jenkins,同时适配jdk8

&#x1f4cc; 前言 在企业级开发中&#xff0c;我们常常面临 新老项目并存 的复杂局面&#xff1a; 老项目基于 JDK 8 开发&#xff0c;短期内无法升级&#xff1b; 新项目采用 JDK 17&#xff08;LTS&#xff09;甚至更高版本&#xff1b; 而作为 CI/CD 核心的 Jenkins&#…

Autodesk Maya 2026.2 全新功能详解:MotionMaker AI 动画、LookdevX 材质增强、USD 工作流优化

软件介绍 Autodesk Maya 2026.2是一款专业的3D计算机图形软件&#xff0c;它为数字内容创作者提供了丰富的工具集&#xff0c;以实现高质量的建模、动画、模拟和渲染。该版本带来了多项性能优化和工作流程改进&#xff0c;特别是针对生成式动画工具MotionMaker进行了重大升级&…

STM32之DMA详解

一、DMA 1. DMA的引入 在嵌入式系统或计算机系统中&#xff0c;数据的传输和处理是非常重要的操作。以下通过一个简单的示例来展示传统数据操作方式与 DMA 引入的必要性&#xff1a; int a 10; int b 20;a b;上述代码包含了变量定义、初始化以及变量数据赋值操作。在传统…