BeautifulSoup中的find_all()及select()查找方法

  • #Beautiful Soup库中的find_all()方法是用于查找HTML文档中符合指定条件的所有元素。它返回一个列表,其中包含了找到的所有元素。

# 对于Beautiful Soup库中的find_all()方法,其参数类型可以分为以下几种:
# 标签名:字符串类型,用于选择指定标签名的元素。例如:'p'、'a'等。
# 属性名:字符串类型,用于选择具有指定属性的元素。例如:'class'、'id'等。
# 属性值:可以是字符串或正则表达式,用于选择具有指定属性值的元素。可以使用字典形式传递,例如{'class': 'intro'}表示选择具有class属性且属性值为'intro'的元素;也可以使用正则表达式,例如{'href': '^https://'}表示选择href属性以https://开头的元素。

# find_all()方法的基本语法如下:
# find_all(name, attrs, recursive, string, limit, **kwargs)
# 参数说明:
# name:可选参数,用于指定要查找的标签名。
# attrs:可选参数,用于指定要查找的元素的属性或属性值。可以是一个字典或关键字参数形式。例如,attrs={'class': 'intro'} 或 class_='intro'。
# recursive:可选参数,表示是否递归查找,默认为True,即在所有子孙节点中查找。soup.find_all('p', recursive=False)
# string:可选参数,用于指定要查找的元素的文本内容。soup.find_all('p', string='This is a regular paragraph.')
# limit:可选参数,用于限制返回的结果数量。 soup.find_all('p', class_='intro', limit=2)
# **kwargs:关键字参数形式的属性查找,例如 id='my-id'
# find_all()方法还支持传递任意的关键字参数来指定其他属性的查询条件。这些额外的关键字参数将被视为要匹配的元素的属性名和属性值。
# 例如,如果要查找所有具有id属性且id属性值为"content"的元素,可以使用以下方式:
# elements = soup.find_all(id='content')
# 同样,如果要查找所有具有data-custom属性且属性值为"123"的元素,可以使用以下方式:
# elements = soup.find_all(attrs={'data-custom': '123'})
# 提示: 参数名class后面添加下划线_是因为class是Python中的保留关键字。

from bs4 import BeautifulSouphtml_doc = """
<!DOCTYPE html>
<html>
<head><title>Find All Method Example</title>
</head>
<body><p class="intro">This is the first paragraph.</p><p class="intro">This is the second paragraph.</p><a href="https://example.com">Link 1</a><a href="https://example.com">Link 2</a><div id="content" class="main-content"><h2>Title</h2><p>This is a paragraph within the main content.</p></div>
</body>
</html>
"""soup = BeautifulSoup(html_doc, 'html.parser')# 选择所有的 p 标签
p_elements = soup.find_all('p')
for element in p_elements:print(element)print('-' * 20)# 不递归查找,只在直接子节点中查找 p 标签
p_elements_non_recursive = soup.find_all('p', recursive=False)
for element in p_elements_non_recursive:print(element)print('-' * 20)
# 查找文本内容为 "This is a regular paragraph." 的 p 标签
p_element = soup.find_all('p', string='This is the first paragraph.')
print(p_element)print('-' * 20)# 选择具有 class 属性且属性值为 "intro" 的元素
intro_elements = soup.find_all(attrs={'class': 'intro'})
for element in intro_elements:print(element)print('-' * 20)# 选择具有 href 属性且属性值以 "https://" 开头的元素
link_elements = soup.find_all(href=True)
for element in link_elements:if element['href'].startswith('https://'):print(element)
  1. select() 方法是 Beautiful Soup 库中用于使用 CSS 选择器选择元素的方法。它返回所有匹配选择器的元素列表。

select() 方法的基本语法如下:
select(selector)
参数说明:
selector:要使用的 CSS 选择器,可以是标签名、类名、ID、属性等。
select()方法的参数类型:
# 标签选择器:字符串类型,如'p'、'a'等。
# 类class选择器:字符串类型,如'.intro'、'.link'等。
# ID选择器:字符串类型,如'#header'、'#footer'等。
# 属性选择器:字符串类型,如'[href]'、'[src^="https://"]'等。

# select 类选择器: 可以通过在选择器前加上点号来表示,用于选择具有指定类名的元素。例如:
# .intro:选择类名为 "intro" 的元素。
# .link:选择类名为 "link" 的元素。
# .active:选择类名为 "active" 的元素。

# select ID选择器: 可以通过在选择器前加上'井号'来表示,用于选择具有指定ID的元素。例如:
# #header:选择ID为 "header" 的元素。
# #footer:选择ID为 "footer" 的元素。
# #nav:选择ID为 "nav" 的元素。

# select 属性选择器: 可以使用'方括号'语法来表示,用于选择具有指定属性或属性值的元素。例如:
# [href]:选择具有 href 属性的元素。
# [src]:选择具有 src 属性的元素。
# [class="intro"]:选择具有 class 属性且属性值为 "intro" 的元素。

from bs4 import BeautifulSouphtml_doc = """
<!DOCTYPE html>
<html>
<head><title>CSS Class Selector Example</title>
</head>
<body><div class="intro"><h1>Welcome to Beautiful Soup!</h1><p class="intro">Beautiful Soup is a Python library for pulling data out of HTML and XML files.</p></div><a href="https://chat18.aichatos.xyz/#/chat/1708763899782" class="link">Click me!</a><ul><li class="active">Item 1</li><li>Item 2</li><li class="active">Item 3</li></ul>
</body>
</html>
"""soup = BeautifulSoup(html_doc, 'html.parser')# 类选择器: 可以通过在选择器前加上'点号'来表示,用于选择具有指定类名的元素# 选择类名为 "intro" 的元素
intro_elements = soup.select('.intro')
for element in intro_elements:print(element)# 选择具有 class 属性且属性值为 "intro" 的元素
# intro_elements = soup.select('[class="intro"]')
# for element in intro_elements:
#     print(element)# 选择具有 href 属性的元素
href_elements = soup.select('[href]')
for element in href_elements:print(element)# # 选择类名为 "link" 的元素
# link_elements = soup.select('.link')
# for element in link_elements:
#     print(element)# # 选择类名为 "active" 的元素
# active_elements = soup.select('.active')
# for element in active_elements:
#     print(element)

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

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

相关文章

聊聊Sora这个AI大神和中美技术赛跑那些事儿

最近有个叫Sora的AI模型火得一塌糊涂。它就像个魔法师&#xff0c;你给它一段话描述&#xff0c;它就能变出一段60秒的高清视频来&#xff0c;这可比之前咱们看过的那些文字转图片的AI厉害多了。想象一下&#xff0c;以后拍电影预告片、做广告宣传啥的&#xff0c;可能直接让So…

Java命令模式:让请求成为对象

Java命令模式&#xff1a;让请求成为对象 在软件设计中&#xff0c;我们经常遇到需要将操作或请求封装成对象的情况。这样&#xff0c;我们可以将它们作为参数传递、排队、记录或撤销。命令模式正是为了满足这种需求而诞生的。在命令模式中&#xff0c;一个请求或操作被封装成…

Ansible 更换aliyun 镜像 并下载tree

目录 查看系统版本找到对应 的版本对当前镜像进行备份下载aliyuan更换成功安装扩展源更换源之后 的三个命令 这里安装一个aliyun 的镜像 本案例 仅供实验参考 生产环境中请谨慎使用 查看系统版本 先查看linux 的系统 版本 ansible slave -m shell -a uname -a找到对应 的版本…

【Spring面试题】

目录 前言 1.Spring框架中的单例bean是线程安全的吗? 2.什么是AOP? 3.你们项目中有没有使用到AOP&#xff1f; 4.Spring中的事务是如何实现的&#xff1f; 5.Spring中事务失效的场景有哪些&#xff1f; 6.Spring的bean的生命周期。 7.Spring中的循环引用 8.构造方法…

FFmpeg解析之avformat_find_stream_info函数

avformat_find_stream_info 的主要作用就是&#xff1a;解析媒体文件并获取相关的流信息 整体的逻辑如下图所示&#xff1a; /*** Read packets of a media file to get stream information. This* is useful for file formats with no headers such as MPEG. This* function…

聊聊JVM运行时数据区的堆内存

聊聊JVM运行时数据区的堆内存 内存模型变迁&#xff1a; Java堆在JVM启动时创建内存区域去实现对象、数组与运行时常量的内存分配&#xff0c;它是虚拟机管理最大的&#xff0c;也是垃圾回收的主要内存区域 。 内存模型变迁&#xff1a; 为什么要有年轻区和老年区&#xff1f;…

【算法与数据结构】链表、哈希表、栈和队列、二叉树(笔记二)

文章目录 四、链表理论五、哈希表理论五、栈和队列理论5.1 单调栈 六、二叉树理论6.1 树的定义6.2 二叉树的存储方式6.3 二叉树的遍历方式6.4 高度和深度 最近博主学习了算法与数据结构的一些视频&#xff0c;在这个文章做一些笔记和心得&#xff0c;本篇文章就写了一些基础算法…

C#面:as 和 is 的区别

as 关键字&#xff1a; as 关键字用于将一个对象转换为指定类型&#xff0c;如果转换成功&#xff0c;则返回该类型的实例&#xff1b;如果转换失败&#xff0c;则返回 null 。as 关键字只能用于引用类型之间的转换&#xff0c;不能用于值类型之间的转换。如果被转换的对象为 …

基于AI将普通RGB图像转换为苹果Vision Pro支持的空间照片

将 RGB 图像转换为空间图片 一、引言 随着AR和VR技术的普及,空间照片格式(.HEIC)逐渐受到关注。这种格式允许用户在AR/VR设备上体验到更为真实的立体空间效果。为了让更多的普通图片也能享受这种技术,我们开发了这款可以将普通RGB图像转换为苹果Vision Pro支持的.HEIC格式的…

NLP主要研究哪些方向?

当前AI炽手可热&#xff0c;NLP是AI的一个重要方向。NLP&#xff08;Natural Language Processing&#xff0c;自然语言处理&#xff09;&#xff0c;致力于让计算机能够理解、解释和处理人类语言。NLP 的目标是使计算机能够像人类一样处理和理解自然语言的文本和语音数据。NLP…

STM32F103学习笔记(七) PWR电源管理(原理篇)

目录 1. PWR电源管理简介 2. STM32F103的PWR模块概述 2.1 PWR模块的基本工作原理 2.2 电源管理的功能和特点 3. PWR模块的常见应用场景 4. 常见问题与解决方案 1. PWR电源管理简介 PWR&#xff08;Power&#xff09;模块是STM32F103系列微控制器中的一个重要组成部分&…

实习日志18

1.刚弄好数据库就破大防了 1.1.图片显示&#xff0c;PDF不显示 我的图片是base64编码显示&#xff0c;pdf是用url显示 首先想到url出问题了 感觉可能是之前的那个问题&#xff0c;到服务器上url变回去了 活字格V9获取图片失败bug&#xff0c;报错404&#xff0c;了解存储路…

使用Streamlit构建纯LLM Chatbot WebUI傻瓜教程

文章目录 使用Streamlit构建纯LLM Chatbot WebUI傻瓜教程开发环境hello Streatelit显示DataFrame数据显示地图WebUI左右布局设置st.sidebar左侧布局st.columns右侧布局 大语言模型LLM Chatbot WebUI设置Chatbot页面布局showdataframe()显示dataframeshowLineChart()显示折线图s…

每天一个数据分析题(一百六十八)

在使用Python做用户画像时有如下代码&#xff1a; sns.boxplot(x ‘type’&#xff0c;y ‘trans count’&#xff0c;data Creditcard) sns表示seaborn,下面关于代码的描述错误的是&#xff08;&#xff09;。 A. data参数传入的可能是一个pandas 的dataframe对象。 B. 该…

进程间的通信-- 管道

一 进程通信原理 我们知道进程间相互独立&#xff0c;具有独立性。那么我们要实现两个进程之间的通信就需要&#xff0c;让这两个进程看到同一个文件。然后一个进程对文件写入&#xff0c;一个进程对文件内容进行读取&#xff0c;这就是现实了进程间的通信。 二 进程通信的几种…

Ansible+Shell+Containerd部署k8s

目录 一.可联网正常使用的虚拟机四台 二.main主机部署ansible实现统一管理 1.下载ansible 2.主机清单和配置文件 3.下发密钥进行管理 三.node部署k8s基础准备 1.完善hosts文件&#xff0c;关闭firewalld&#xff0c;disabled掉selinux 2.时间同步、禁用交换分区、配置内…

【C++私房菜】面向对象中的多态

文章目录 一、多态二、对象的静态类型和动态类型三、虚函数和纯虚函数1、虚函数2、虚析构函数3、抽象基类和纯虚函数4、多态的原理 四、重载、覆盖(重写)、隐藏(重定义)的对比 一、多态 OOP的核心思想是多态性(polymorphism)。多态性这个词源自希腊语&#xff0c;其含义是“多…

【黑马程序员】1、TypeScript介绍_黑马程序员前端TypeScript教程,TypeScript零基础入门到实战全套教程

课程地址&#xff1a;【黑马程序员前端TypeScript教程&#xff0c;TypeScript零基础入门到实战全套教程】 https://www.bilibili.com/video/BV14Z4y1u7pi/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 目录 1、TypeScript介绍 1.1 TypeScript是什…

信号通信与消息队列实现的通信:2024/2/23

作业1&#xff1a;将信号和消息队列的课堂代码敲一遍 1.1 信号 1.1.1 信号默认、捕获、忽略处理(普通信号) 代码&#xff1a; #include <myhead.h> void handler(int signo) {if(signoSIGINT){printf("用户键入 ctrlc\n");} } int main(int argc, const ch…

Windows Server 2019 IIS HTTPS证书部署流程详解

一、下载SSL证书 1、下载IIS 类型的证书 以阿里云证书为例&#xff1a; 2、解压已下载的SSL证书压缩包 二、导入SSL证书 1、在服务器上使用WinR组合键&#xff0c;打开运行对话框&#xff0c;输入mmc&#xff0c;单击确定 打开控制台操作界面&#xff0c;如下&#xff1a; …