Python - 爬虫利器 - BeautifulSoup4常用 API

文章目录

    • 前言
    • BeautifulSoup4 简介
      • 主要特点:
      • 安装方式:
    • 常用 API
      • 1. 创建 BeautifulSoup 对象
      • 2. 查找标签
        • find(): 返回匹配的第一个元素
        • find_all(): 返回所有匹配的元素列表
        • select_one() & select(): CSS 选择器
      • 3. 访问标签内容
        • text 属性: 获取标签内纯文本
        • get_text(): 同样作用于获取文本
        • attrs 属性: 获取标签的所有属性
        • [attribute]: 直接访问某个属性值
      • 4. 修改文档
        • 添加新标签
        • 删除标签
        • 替换标签
      • 5. 导航树结构
        • parent: 上级父节点
        • children: 下级子节点迭代器
        • siblings: 并列兄弟节点
    • 实战小技巧(关键点)
      • F12打开控制台
      • 复制对应图片的css选择器
      • 直接代码中使用
    • 结束语

前言

在时光的长河里,每一滴水都是昨日的星辰,映照着永不重复的今天。

BeautifulSoup4 简介

BeautifulSoup4(通常简称为 BS4)是一个用于解析 HTML 和 XML 文档的 Python 库。它的设计目的是简化从复杂网页中提取数据的过程。BeautifulSoup4 可以处理各种各样的标记语言,并提供了一个简单的接口来进行文档导航、搜索和修改。

主要特点:

  • 跨平台支持: Beautiful Soup 支持 Windows、Linux、Mac OS X 等多个操作系统。
  • 兼容性强: 支持多种解析器,包括 Python 内置的标准库解析器 (html.parser)、第三方解析器 lxmlhtml5lib
  • 易于学习: 提供了简单且直观的 API,适合初学者使用。
  • 强大功能: 包含丰富的函数和方法,可以帮助开发者高效地完成任务。

安装方式:

你可以通过 pip 工具轻松安装 BeautifulSoup4:

pip install beautifulsoup4

常用 API

以下是 BeautifulSoup4 中一些常用的 API 方法和功能:

1. 创建 BeautifulSoup 对象

首先,你需要创建一个 BeautifulSoup 对象来解析 HTML 或 XML 文档。

from bs4 import BeautifulSoup# 使用默认的 html.parser 解析器
html_doc = "<html><head><title>Example Page</title></head><body id='id'><a href='123'></a><p class='my-class child-class'><i>444</i><h1>Hello World</h1></p></body></html>"
soup = BeautifulSoup(html_doc, 'html.parser')# 打印解析后的结果
print(soup.prettify())

2. 查找标签

可以通过标签名称或其他属性来查找特定的元素。

find(): 返回匹配的第一个元素
first_paragraph = soup.find('p')
print(first_paragraph)  # 输出: <p>Hello World</p>
find_all(): 返回所有匹配的元素列表
all_headings = soup.find_all(['h1', 'h2'])
for heading in all_headings:print(heading.text)
select_one() & select(): CSS 选择器
css_selector_example = soup.select_one('.my-class')
print(css_selector_example)css_selectors_examples = soup.select('#id > .child-class')
for element in css_selectors_examples:print(element.text)

3. 访问标签内容

访问标签内的文本和其他属性。

text 属性: 获取标签内纯文本
text_content = first_paragraph.text
print(text_content)  # 输出: Hello World
get_text(): 同样作用于获取文本
get_text_content = first_paragraph.get_text()
print(get_text_content)  # 输出: Hello World
attrs 属性: 获取标签的所有属性
attributes = first_paragraph.attrs
print(attributes)  # 如果没有其他属性,则为空字典 {}
[attribute]: 直接访问某个属性值
link_tag = soup.a
href_value = link_tag['href']
print(href_value)

4. 修改文档

除了查询外,还可以动态地添加、删除或修改文档中的节点。

添加新标签
new_tag = soup.new_tag("b")
new_tag.string = "Bold Text"
first_paragraph.append(new_tag)
print(first_paragraph)  # 输出: <p>Hello World<b>Bold Text</b></p>
删除标签
tag_to_remove = soup.b
tag_to_remove.decompose()
print(first_paragraph)  # 输出: <p>Hello World</p>
替换标签
replacement_tag = soup.new_tag("i")
replacement_tag.string = "Italic Text"
first_paragraph.i.replace_with(replacement_tag)
print(first_paragraph)  # 输出: <p>Hello World<i>Italic Text</i></p>

5. 导航树结构

BeautifulSoup 还提供了多种方法来遍历和操作 DOM 树。

parent: 上级父节点
parent_node = first_paragraph.parent
print(parent_node.name)  # 输出: body
children: 下级子节点迭代器
children_nodes = list(first_paragraph.children)
for child in children_nodes:print(child)
siblings: 并列兄弟节点
next_sibling = first_paragraph.next_sibling
previous_sibling = first_paragraph.previous_sibling
print(next_sibling)
print(previous_sibling)

实战小技巧(关键点)

实际情况下,很多节点不好找到,可以利用浏览器功能,可以直接复制css选择器

F12打开控制台

F12打开控制台

复制对应图片的css选择器

复制css选择器

直接代码中使用

from bs4 import BeautifulSoup# 使用默认的 html.parser 解析器
html_doc = "<html></html>"
soup = BeautifulSoup(html_doc, 'html.parser')
# 只是为了示例  不可运行 以下是复制出来的内容
soup.select('#ice-container > div.tbpc-layout > div.screen-outer.clearfix > div.main > div.core.J_Core > div > div:nth-child(1) > div:nth-child(1) > div > div > div > div > div:nth-child(3) > div > div > a')

结束语

文章中API都验证过,可直接运行👽👽👽
运行有问题可联系作者评论交流🤭🤭🤭
风是自由的,你也是自由🤠🤠🤠
欢迎一起交流学习☠️☠️☠️
有帮助请留下足迹 一键三连🥰🥰🥰
爬虫大佬勿喷,欢迎指正问题😈😈😈
后面会做一系列的爬虫文章,请持续关注作者🤡🤡🤡。

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

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

相关文章

排序与算法:选择排序

执行效果 选择排序的执行效果是这样的&#xff1a; 呃……看不懂吗&#xff1f;没关系&#xff0c;接着往下看介绍 算法介绍 选择排序&#xff08;Selection sort&#xff09;是一种简单直观的排序算法。选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置…

Day4:强化学习之Qlearning走迷宫

一、迷宫游戏 1.环境已知 迷宫环境是定义好的&#xff0c;障碍物位置和空位置是已知的&#xff1b; # 定义迷宫 grid [[0, 0, 0, 1, 0],[0, 1, 0, 1, 0],[0, 1, 0, 0, 0],[0, 0, 0, 1, 0],[0, 1, 1, 1, 0] ] 2.奖励方式已知 如果碰到障碍物则得-1&#xff0c;如果到终点则…

Windows 环境下 Grafana 安装指南

目录 下载 Grafana 安装 Grafana 方法 1&#xff1a;使用 .msi 安装程序&#xff08;推荐&#xff09; 方法 2&#xff1a;使用 .zip 压缩包 启动 Grafana 访问 Grafana 配置 Grafana&#xff08;可选&#xff09; 卸载 Grafana&#xff08;如果需要&#xff09; 下载 G…

栈回溯方案

注&#xff1a;栈回溯无法很好的定位到未调优化的函数&#xff0c;需要编译前使用 -fno-optimize-sibling-calls 选项禁止尾调优化。 基于unwind的栈回溯 在 arm 架构下&#xff0c;不少32位系统用的是 unwind 形式的栈回溯&#xff0c;这种栈回溯要复杂很多。首先需要程序有一…

[算法学习笔记]1. 枚举与暴力

一、枚举算法 定义 枚举是基于已有知识来猜测答案的问题求解策略。即在已知可能答案的范围内&#xff0c;通过逐一尝试寻找符合条件的解。 2. 核心思想 穷举验证&#xff1a;对可能答案集合中的每一个元素进行尝试终止条件&#xff1a;找到满足条件的解&#xff0c;或遍历完…

突破反爬困境:从服务端渲染到客户端SPA,爬虫环境的演变与新挑战(一)

声明 本文所讨论的内容及技术均纯属学术交流与技术研究目的&#xff0c;旨在探讨和总结互联网数据流动、前后端技术架构及安全防御中的技术演进。文中提及的各类技术手段和策略均仅供技术人员在合法与合规的前提下进行研究、学习与防御测试之用。 作者不支持亦不鼓励任何未经授…

(蓝桥杯——10. 小郑做志愿者)洛斯里克城志愿者问题详解

题目背景 小郑是一名大学生,她决定通过做志愿者来增加自己的综合分。她的任务是帮助游客解决交通困难的问题。洛斯里克城是一个六朝古都,拥有 N 个区域和古老的地铁系统。地铁线路覆盖了树形结构上的某些路径,游客会询问两个区域是否可以通过某条地铁线路直达,以及有多少条…

java基础——抽象类与接口

目录 一、抽象类 1. 定义 2. 示例代码 3. 特点 4. 使用场景 二、接口 1. 定义 2. 示例代码 3. 特点 三、抽象类和接口的区别 四、接口与抽象类的结合 五、自定义排序方法 六、总结 在 Java 编程中&#xff0c;抽象类和接口是两个极为重要的概念&#xff0c;它们在…

HTML应用指南:利用GET请求获取全国乐乐茶门店位置信息

随着新零售业态的快速发展,门店位置信息的获取变得越来越重要。作为新茶饮品牌之一,乐乐茶自2016年在上海五角场创立,乐乐茶不仅在产品质量和服务体验上持续领先,还积极构建广泛的门店网络,以支持其不断增长的用户群体。为了更好地理解和利用这些数据,本篇文章将深入探讨…

蚁剑(AutSword)的下载安装与报错解决

蚁剑&#xff08;AutSword&#xff09;的下载安装与报错解决 1.下载 唯一官方github下载地址 GitHub - AntSwordProject/AntSword-Loader: AntSword 加载器 2.安装 打开并且进入到下面的界面 下载需要的的版本 进行初始化 3.报错 出现下面的报错 4.解决方法 出现上面报错…

从低清到4K的魔法:FlashVideo突破高分辨率视频生成计算瓶颈(港大港中文字节)

论文链接&#xff1a;https://arxiv.org/pdf/2502.05179 项目链接&#xff1a;https://github.com/FoundationVision/FlashVideo 亮点直击 提出了 FlashVideo&#xff0c;一种将视频生成解耦为两个目标的方法&#xff1a;提示匹配度和视觉质量。通过在两个阶段分别调整模型规模…

《计算机视觉》——角点检测和特征提取sift

角点检测 角点的定义&#xff1a; 从直观上理解&#xff0c;角点是图像中两条或多条边缘的交点&#xff0c;在图像中表现为局部区域内的灰度变化较为剧烈的点。在数学和计算机视觉中&#xff0c;角点可以被定义为在两个或多个方向上具有显著变化的点。比如在一幅建筑物的图像…

Linux下ioctl的应用

文章目录 1、ioctl简介2、示例程序编写2.1、应用程序编写2.2、驱动程序编写 3、ioctl命令的构成4、测试 1、ioctl简介 ioctl&#xff08;input/output control&#xff09;是Linux中的一个系统调用&#xff0c;主要用于设备驱动程序与用户空间应用程序之间进行设备特定的输入/…

对称加密算法——IDEA加密算法

Java IDEA算法详解 1. 理论背景 IDEA&#xff08;International Data Encryption Algorithm&#xff09;是一种对称密钥加密算法&#xff0c;由Xuejia Lai和James Massey于1991年提出。它被设计用于替代DES&#xff08;Data Encryption Standard&#xff09;算法&#xff0c;…

Jenkins 给任务分配 节点(Node)、设置工作空间目录

Jenkins 给任务分配 节点(Node)、设置工作空间目录 创建 Freestyle project 类型 任务 任务配置 Node 打开任务-> Configure-> General 勾选 Restrict where this project can be run Label Expression 填写一个 Node 的 Label&#xff0c;输入有效的 Label名字&#x…

20250217 随笔 redis非原子性操作简述

从你提供的文本来看&#xff0c;核心是 Redis 作为缓存的检查机制&#xff0c;以及非原子性操作导致的不一致性问题。 我们可以拆解为两个部分来理解&#xff1a; &#x1f4cc; 1. 逻辑&#xff1a;先查 Redis&#xff0c;再决定是否注册 逻辑流程 先查询 Redis 是否有某个 …

SVM对偶问题

1、对偶问题数学基础 对偶问题&#xff1a;在线性规划中&#xff0c;每一个线性规划问题(称为原问题)都有一个与之对应的对偶问题。从数学形式上看&#xff0c;如果原问题是求解一个线性目标函数的最大值&#xff08;或最小值&#xff09;&#xff0c;在满足一系列线性不等式&…

CSDN、markdown环境下如何插入各种图(流程图,时序图,甘特图)

流程图 横向流程图 mermaid graph LRA[方形] --> B{条件a}B -->|满足| C(圆角)B -->|不满足| D(圆角)C --> E[输出结果1]D --> E效果图&#xff1a; 竖向流程图 mermaid graph TDC{条件a} --> |a1| A[方形]C --> |a2| F[竖向流程图]A --> B(圆角)B …

MSI微星电脑冲锋坦克Pro Vector GP76 12UGS(MS-17K4)原厂Win11系统恢复镜像,含还原功能,预装OEM系统下载

适用机型&#xff1a;【MS-17K4】 链接&#xff1a;https://pan.baidu.com/s/1P8ZgXc6S_J9DI8RToRd0dQ?pwdqrf1 提取码&#xff1a;qrf1 微星笔记本原装出厂WINDOWS11系统自带所有驱动、出厂主题壁纸、系统属性专属联机支持标志、Office办公软件、MSI Center控制中心等预装…

MySQL 之INDEX 索引(Index Index of MySQL)

MySQL 之INDEX 索引 1.4 INDEX 索引 1.4.1 索引介绍 索引&#xff1a;是排序的快速查找的特殊数据结构&#xff0c;定义作为查找条件的字段上&#xff0c;又称为键 key&#xff0c;索引通过存储引擎实现。 优点 大大加快数据的检索速度; 创建唯一性索引&#xff0c;保证数…