Python爬虫(三):BeautifulSoup库

1. BeautifulSoup是什么?

BeautifulSoup 是一个 Python 库,专门用来解析 HTML 或 XML 文件,方便我们提取数据。它能把网页源代码转换成树形结构,让我们可以轻松查找、修改内容,并自动处理编码问题(如 Unicode 和 UTF-8)。

支持的解析器

BeautifulSoup 支持多种解析器,不同解析器的速度和容错能力不同:

解析器使用方法优点缺点
Python标准库BeautifulSoup(html, "html.parser")内置,无需安装速度较慢
lxml (HTML)BeautifulSoup(html, "lxml")速度快,容错强需要额外安装
lxml (XML)BeautifulSoup(html, "xml")唯一支持 XML 的解析器需要额外安装
html5libBeautifulSoup(html, "html5lib")容错最好,像浏览器一样解析速度最慢

推荐使用 lxml,因为它最快!


2. 安装 BeautifulSoup

安装 BeautifulSoup

pip install beautifulsoup4

安装 lxml(推荐)

pip install lxml

安装 html5lib(可选)

pip install html5lib

3. 快速上手

(1)解析 HTML 字符串

from bs4 import BeautifulSouphtml = '''
<!DOCTYPE html>
<html>
<head><title>BeautifulSoup学习</title>
</head>
<body><p>Hello BeautifulSoup</p>
</body>
</html>
'''# 使用 lxml 解析器
soup = BeautifulSoup(html, "lxml")
print(soup.p.text)  # 输出: Hello BeautifulSoup

(2)解析本地 HTML 文件

soup = BeautifulSoup(open("index.html"), "lxml")
print(soup.title.text)  # 输出网页标题

4. BeautifulSoup 的 4 种对象

(1)Tag(标签)

  • 对应 HTML 里的标签,如 <title><p>
  • 可以获取标签名 .name 和属性 .attrs
tag = soup.title
print(tag.name)  # 输出: title
print(tag.attrs)  # 输出: {'class': ['tl']}

(2)NavigableString(文本内容)

  • 对应标签里的文本内容,如 <p>Hello</p> 里的 "Hello"
  • 可以用 .string 获取文本。
text = soup.p.string
print(text)  # 输出: Hello BeautifulSoup

(3)BeautifulSoup(整个文档)

  • 代表整个 HTML 文档,可以看作最大的 Tag
  • 它的 .name[document]
print(soup.name)  # 输出: [document]

(4)Comment(注释)

  • 对应 HTML 注释 <!-- 这是注释 -->,但 .string 会去掉注释符号。
comment = soup.find(text=lambda text: isinstance(text, Comment))
print(comment)  # 输出: 这是注释

5. 搜索文档树

(1)find_all() 查找所有匹配的标签

# 查找所有 <a> 标签
links = soup.find_all("a")# 查找 class="elsie" 的所有标签
elsie_tags = soup.find_all(class_="elsie")# 查找 id="link1" 的标签
link1 = soup.find_all(id="link1")# 查找文本包含 "BeautifulSoup" 的标签
text_match = soup.find_all(text="BeautifulSoup")

(2)find() 查找第一个匹配的标签

first_link = soup.find("a")  # 返回第一个 <a> 标签

(3)CSS 选择器(推荐!)

# 查找所有 <a> 标签
soup.select("a")# 查找 class="elsie" 的所有标签
soup.select(".elsie")# 查找 id="link1" 的标签
soup.select("#link1")# 查找 body 下的所有 <a> 标签
soup.select("body a")# 查找第一个匹配的标签
soup.select_one(".elsie")

6. 总结

  • BeautifulSoup 是 Python 爬虫必备的 HTML/XML 解析库。
  • 推荐使用 lxml 解析器,因为它最快。
  • 4 种对象TagNavigableStringBeautifulSoupComment
  • 搜索方法
    • find_all() 查找所有匹配的标签
    • find() 查找第一个匹配的标签
    • select() 使用 CSS 选择器(最方便!)

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

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

相关文章

AI电销机器人智能的发展趋势是什么?

AI电销机器人智能的发展趋势是什么&#xff1f;电销机器人智能的发展前景怎么样&#xff1f;随着互联网技术的不断发展&#xff0c;AI电销机器人智能已经成为了许多企业实现销售数字化转型的重要工具&#xff0c;我们一起来看看。 AI电销机器人正突破传统语音机械应答的边界&a…

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…

C++_哈希表

本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、基础概念 1. 哈希核心思想&#xff1a; 哈希函数的作用&#xff1a;通过此函数建立一个Key与存储位置之间的映射关系。理想目标&#xff1a;实现…

Mac M芯片 RAG 极简流程 安装 ragflow + LM studio

本文基于 【【知识科普】【纯本地化搭建】【不本地也行】DeepSeek RAGFlow 构建个人知识库】 https://www.bilibili.com/video/BV1WiP2ezE5a/?share_sourcecopy_web&vd_source9a55f12dd64d8e30ab6c0efc62844343 1 .docker-compose yml文件修改,指定平台 platform: linux/…

Rsync+inotify+nfs实现数据实时备份方案

技术栈 NFS是 Network File System的简写&#xff0c;即网络文件系统。NFS的优点是内核直接支持&#xff0c;部署简单、运行稳定&#xff0c;协议简单、传输效率高。缺点是仅依靠IP地址或主机名来决定用户能否挂载共享目录&#xff0c;容易出现单点故障。 rsync是linux系统下的…

Vue ⑥-路由

单页应用程序 单页应用程序&#xff0c;即 Single-Page Application&#xff0c;简称 SPA&#xff0c;是一种使用 JavaScript、HTML 和 CSS 构建的 Web 应用程序。SPA 的核心是前端路由&#xff0c;它使得用户在访问网站时&#xff0c;只需加载一次页面&#xff0c;然后通过前…

Hadoop复习(九)

Azkaban工作流管理器 选择 问题 1 判断题 2 / 2 分 工作流是指具有依赖的一组job任务&#xff0c;被依赖的job任务最后执行 正确 错误 问题 2 判断题 2 / 2 分 Azkaban兼容任何版本的Hadoop 正确 错误 问题 3 判断题 2 / 2 分 独立服务器模式下&#xff0c;Azkab…

SpringMVC相关知识(二)

一.重定向和转发 1.ModelandView 设置ModelAndView对象 , 根据view的名称 , 和视图解析器跳到指定的页面 页面 : {视图解析器前缀} viewName {视图解析器后缀} 相关代码&#xff1a; <!-- 视图解析器 --> <bean class"org.springframework.web.servlet.vi…

std::ratio 简单使用举例

author: hjjdebug date: 2025年 06月 09日 星期一 14:28:40 CST descrip: std::ratio 简单使用举例 文章目录 1. 先看一个简单的例子 1/2/1/35/62 std::ratio 的手册页3. std::ratio_add 到底是什么呢&#xff1f;4. 代码注释5. 加深理解.6. 自定义的std::ratio 与 std::ratio_…

Docker 优势与缺点全面解析:容器技术的利与弊

在当今云计算、微服务、DevOps盛行的时代&#xff0c;Docker 几乎成了开发者、运维工程师的标配工具之一。自2013年诞生以来&#xff0c;Docker 以其轻量、快速、易移植的特点&#xff0c;彻底改变了应用的构建、交付与部署方式。 但任何技术都有两面性&#xff0c;Docker 也不…

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…

使用Redis作为缓存优化ElasticSearch读写性能

在现代数据密集型应用中,ElasticSearch凭借其强大的全文搜索能力成为许多系统的首选搜索引擎。然而,随着数据量和查询量的增长,ElasticSearch的读写性能可能会成为瓶颈。本文将详细介绍如何使用Redis作为缓存层来显著提升ElasticSearch的读写性能,包括完整的架构设计、详细…

获取wordpress某个栏目的内容数量

获取wordpress某个栏目的内容数量 <?php // 将以下 8 改成你的分类 ID 即可echo get_category(8)->count;?> 在制作wordpress模板时&#xff0c;有时会需要调用某个分类目录下的所有内容数量&#xff0c;通过这段简洁的代码就可以实现。 给WordPress自定义字段加…

uniapp 安卓 APP 后台持续运行(保活)的尝试办法

在移动应用开发领域&#xff0c;安卓系统的后台管理机制较为复杂&#xff0c;应用在后台容易被系统回收&#xff0c;导致无法持续运行。对于使用 Uniapp 开发的安卓 APP 来说&#xff0c;实现后台持续运行&#xff08;保活&#xff09;是很多开发者面临的重要需求&#xff0c;比…

深度学习——知识提炼

第一部分&#xff1a;引言与背景——为什么需要知识提炼&#xff1f; 一、模型压缩的背景 随着深度学习的发展&#xff0c;模型变得越来越大&#xff08;如 ResNet152、BERT、ViT、GPT 等&#xff09;&#xff0c;其参数量动辄数亿甚至上百亿。这些大模型虽然性能强大&#x…

开源之夏·西安电子科技大学站精彩回顾:OpenTiny开源技术下沉校园,点燃高校开发者技术热情

开源之夏2025编程活动正在如火如荼的进行中&#xff0c;当前也迎来了报名的倒计时阶段&#xff0c;开源之夏组织方也通过高校行系列活动进入各大高校&#xff0c;帮助高校开发者科普开源文化、开源活动、开源技术。 6月4日 开源之夏携手多位开源技术大咖、经验型选手走进西安电…

时间复杂度和算法选择

数据范围 时间复杂度 算法选择 n \leq 30 指数级别 O(2^n) 深度优先搜索&#xff08;DFS&#xff09; 剪枝、状态压缩动态规划 n \leq 100 O(n^3) Floyd 算法、动态规划、高斯消元 n \leq 1000 O(n^2) 、 O(n^2 \log n) 动态规划、二分…

数据分析实战2(Tableau)

1、Tableau功能 数据赋能&#xff08;让业务一线也可以轻松使用最新数据&#xff09; 分析师可以直接将数据看板发布到线上自动更新看板自由下载数据线上修改图表邮箱发送数据设置数据预警 数据探索&#xff08;通过统计分析和数据可视化&#xff0c;从数据发现问题&#xf…

CentOS7_Linux下安装Docker和docker-compose

目录 环境要求安装步骤1、修改镜像源配置文件2、卸载旧版本 Docker&#xff08;如有&#xff09;3、安装依赖工具4、添加 Docker 官方仓库5、安装 Docker 引擎6、启动 Docker 并设置开机自启7、验证安装8、配置镜像加速器创建配置文件重启 Docker 生效 9、允许非 root 用户操作…