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.mzph.cn/web/70083.shtml

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

相关文章

DeepSeek驱动下的数据仓库范式转移:技术解耦、认知重构与治理演进

DeepSeek驱动下的数据仓库范式转移&#xff1a;技术解耦、认知重构与治理演进 ——基于多场景实证的架构革命研究 一、技术解耦&#xff1a;自动化编程范式的演进 1.1 语义驱动的ETL生成机制 在金融风控场景中&#xff0c;DeepSeek通过动态语法树解析&#xff08;Dynamic Syn…

代码随想录算法训练营day38(补0206)

如果求组合数就是外层for循环遍历物品&#xff0c;内层for遍历背包。 如果求排列数就是外层for遍历背包&#xff0c;内层for循环遍历物品。 1.零钱兑换 题目 322. 零钱兑换 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c…

golang channel底层实现?

底层数据实现 type hchan struct { qcount uint // 当前队列中的元素数量 dataqsiz uint // 环形队列的大小 buf unsafe.Pointer // 指向环形队列的指针 elemsize uint16 // 元素大小 closed uint32 // chan…

图的最小生成树算法: Prim算法和Kruskal算法(C++)

上一节我们学习了最短路径算法, 这一节来学习最小生成树. 最小生成树(Minimum Spanning Tree, MST)算法是图论中的一种重要算法, 主要用于在加权无向图中找到一棵生成树, 使得这棵树包含图中的所有顶点, 并且所有边的权重之和最小. 这样的树被称为最小生成树. 最小生成树广泛应…

矩阵系统源码搭建的数据管理开发功能解析,支持OEM

一、引言 在矩阵系统中&#xff0c;数据犹如血液&#xff0c;贯穿整个系统的运行。高效的数据管理开发功能是确保矩阵系统稳定、可靠运行的关键&#xff0c;它涵盖了数据的存储、处理、安全等多个方面。本文将深入探讨矩阵系统源码搭建过程中数据管理功能的开发要点。 二、数据…

DeepSeek 助力 Vue 开发:打造丝滑的日期选择器(Date Picker),未使用第三方插件

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

操作系统知识点2

1.P&#xff0c;V操作可以实现进程同步&#xff0c;进程互斥&#xff0c;进程的前驱关系 2.先来先服务调度算法是不可抢占的算法 3.UNIX操作系统中&#xff0c;对文件系统中空闲区的管理通常采用成组链接法 4.对于FAT32文件系统&#xff0c;它采用的是链接结构 5.不同的I/O…

【个人开发】deepspeed+Llama-factory 本地数据多卡Lora微调【完整教程】

文章目录 1.背景2.微调方式2.1 关键环境版本信息2.2 步骤2.2.1 下载llama-factory2.2.2 准备数据集2.2.3 微调模式2.2.3.1 zero-1微调2.2.3.2 zero-2微调2.2.3.3 zero-3微调2.2.3.4 单卡Lora微调 2.2.4 实验2.2.4.1 实验1&#xff1a;多GPU微调-zero12.2.4.2 实验2&#xff1a;…

iOS 中使用 FFmpeg 进行音视频处理

在 iOS 中使用 FFmpeg 进行音视频处理,通常需要将 FFmpeg 的功能集成到项目中。由于 FFmpeg 是一个 C 库,直接在 iOS 中使用需要进行一些配置和封装。 1. 在 iOS 项目中集成 FFmpeg 方法 1:使用 FFmpeg 预编译库 下载 FFmpeg iOS 预编译库: 可以从以下项目中获取预编译的 …

Elasticsearch:将 Ollama 与推理 API 结合使用

作者&#xff1a;来自 Elastic Jeffrey Rengifo Ollama API 与 OpenAI API 兼容&#xff0c;因此将 Ollama 与 Elasticsearch 集成非常容易。 在本文中&#xff0c;我们将学习如何使用 Ollama 将本地模型连接到 Elasticsearch 推理模型&#xff0c;然后使用 Playground 向文档提…

openGauss 3.0 数据库在线实训课程18:学习视图管理

前提 我正在参加21天养成好习惯| 第二届openGauss每日一练活动 课程详见&#xff1a;openGauss 3.0.0数据库在线实训课程 学习目标 掌握openGauss视图的管理&#xff1a;创建视图、删除视图、查询视图的信息、修改视图的信息。 课程作业 1.创建表&#xff0c;创建普通视图…

腾讯云大模型知识引擎×DeepSeek赋能文旅

腾讯云大模型知识引擎DeepSeek赋能文旅 ——以合肥文旅为例的技术革新与实践路径 一、技术底座&#xff1a;知识引擎与DeepSeek的融合逻辑 腾讯云大模型知识引擎与DeepSeek模型的结合&#xff0c;本质上是**“知识库检索增强生成&#xff08;RAG&#xff09;实时联网能力”**…

利用SkinMagic美化MFC应用界面

MFC(Microsoft Foundation Class)应用程序的界面设计风格通常比较保守,而且虽然MFC框架的控件功能强大且易于集成,但视觉效果较为朴素,缺乏现代感。尤其是MFC应用程序的设计往往以功能实现为核心,界面设计可能显得较为简洁甚至略显呆板,用户体验可能不如现代应用程序流畅…

qt QOpenGLTexture详解

1. 概述 QOpenGLTexture 是 Qt5 提供的一个类&#xff0c;用于表示和管理 OpenGL 纹理。它封装了 OpenGL 纹理的创建、分配存储、绑定和设置像素数据等操作&#xff0c;简化了 OpenGL 纹理的使用。 2. 重要函数 构造函数&#xff1a; QOpenGLTexture(const QImage &image,…

nlp|微调大语言模型初探索(2),训练自己的聊天机器人

前言 上篇文章记录了具体的微调语言大模型步骤&#xff0c;以及在微调过程中可能遇见的各种报错&#xff0c;美中不足的是只是基于开源数据集的微调&#xff0c;今天来记录一下怎么基于自己的数据集去微调大语言模型&#xff0c;训练自己的智能机器人&#xff01;&#xff01;&…

Java 大视界 -- 量子计算时代 Java 大数据的潜在变革与应对策略(88)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

手机功耗BugReport字段含义介绍

BugReport一般用来分析功耗问题&#xff0c;例如休眠待机&#xff0c;后台待机&#xff0c;游戏&#xff0c;视频&#xff0c;相机场景等 BugReport字段含义介绍 BugReport字段 含义 备注 Reboot 设备的重启事件 CPU running CPU运行状态&#xff0c;休眠 或者 唤醒 只有…

什么是 近端策略优化算法PPO

什么是 近端策略优化算法PPO 近端策略优化算法(Proximal Policy Optimization,PPO)是OpenAI公司于2017年开发的一系列无模型强化学习算法,用于优化策略网络以最大化累计奖励。以下是具体介绍及示例: 算法原理 策略梯度:PPO基于策略梯度算法,通过估计策略网络的梯度来更…

计算机视觉-局部特征

一、局部特征 1.1全景拼接 先用RANSAC估计出变换&#xff0c;就可以拼接两张图片 ①提取特征 ②匹配特征 ③拼接图像 1.2 点的特征 怎么找到对应点&#xff1f;&#xff08;才能做点对应关系RANSAC&#xff09; &#xff1a;特征检测 我们希望找到的点具有的特征有什么特…

个人搭建CDN加速服务 特网科技

在互联网快速发展的今天&#xff0c;网站的加载速度对用户体验有着至关重要的影响&#xff0c;传统的网页加载方式依赖于服务器的性能和网络环境&#xff0c;这使得某些网站的页面加载时间过长&#xff0c;用户体验不佳&#xff0c;为了解决这个问题&#xff0c;许多企业开始采…