【Python】使用匿名函数Lambda解析html源码的任意元素(Seleinium ,BeautifulSoup皆适用)

一直都发现lambda函数非常好用,它可以用简洁的方式编写小函数,无需写冗长的过程就可以获取结果。干脆利落!

它允许我们定义一个匿名函数,在调用一次性的函数时非常有用。

最近整理了一些,lambda函数结合BeautifulSoup或者selenium 的库,来解析HTML,并提取任意标签下的元素的方法。

先定义一个html源码:

from bs4 import BeautifulSoup# 假设这是你的HTML源码
html_doc = """
<html>
<head><title>The Dormouse's story</title>
</head>
<body>
<p class="title"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
</body>
</html>
"""# 使用BeautifulSoup解析HTML
soup = BeautifulSoup(html_doc, 'html.parser')

1. 提取节点下,任意含有href的内容

如果我们想要提取某个div节点下的所有 href 内容,而在不确定标签值,例如spanpa 标签的时候,我们可以提取每个标签的href属性值,以获取所有的链接url

这里,我们就可以用lambda的方法:

comments = soup.find_all(lambda tag:tag.has_attr('href')) 
'''对子元素下的任意href进行提取 '''
for i in range(len(comments)):        link=comments[i].attrs['href']

在这段代码中, lambda tag:tag.has_attr('href') 构建了一个lambda匿名函数,

用于定义find_all的搜索条件。

在这个lambda函数中,tag是传递给函数的参数,代表文档中的一个标签。

tag.has_attr('href') 则负责检查,传入的tag是否有一个名为href的属性。

href是一个常见的HTML属性,用于指定超链接的目标URL。

上面的写法用于查找所有包含href属性的标签(通常是<a>标签,即超链接)。
在这里插入图片描述

这个方法提取下,就不用在意是a 标签还是别的什么标签了,

直接查找所有具有href属性的标签,并返回一个包含这些标签的列表。

这个方法可以直接可以打包成一个通用的方法,以后直接获取href的时候可以直接调用!

2. 获取网页源码下,包含所有含p标签的列表

有时候,我们可能需要做到处理一整个节点下,含有某个节点的所有内容,例如下面的br节点:
在这里插入图片描述
上面的源码看起来还是很规则的,如果还要再复杂一点,而你又想获取所有br的内容的话,可以这样:

find_tag = lambda tag_name: soup.find_all(tag_name)

使用lambda函数提取所有的<br>标签

br_tags = find_tag('br')

如果是p标签,那么就是:

p_tags = find_tag('p')

完整代码:


# 定义一个lambda函数来查找任意标签
find_tag = lambda tag_name: soup.find_all(tag_name)# 使用lambda函数提取所有的<p>标签
p_tags = find_tag('p')# 使用lambda函数提取所有的<a>标签
a_tags = find_tag('a')# 打印结果
for tag in p_tags:print(tag)for tag in a_tags:print(tag)

在这个示例中,find_tag是一个lambda函数,它接受一个参数tag_name(你想要查找的标签名),并返回一个包含所有该标签的列表。

然后你可以使用这个函数来查找任何你想要的标签。

这种方法的好处是代码简洁,并且可以轻松地重用于不同的标签。你只需要改变传递给lambda函数的参数即可。

3.提取任意节点下的文字

如果你想用selenium操作上面类似的操作,也同样可以!

在Python中,使用Selenium的find_elements方法,来提取任意标签下的所有文本。

你可以按照以下步骤操作:

  1. 导入Selenium的WebDriver和By模块。
  2. 创建WebDriver实例。
  3. 打开目标网页。
  4. 使用find_elements方法和适当的By类来查找所有你想要的标签。
  5. 遍历找到的元素列表,使用text属性来获取每个元素的文本。
  6. 打印或处理这些文本。
  7. 关闭浏览器。

下面是一个具体的代码示例:

from selenium import webdriver
from selenium.webdriver.common.by import By# 创建WebDriver实例,这里以Chrome为例
driver = webdriver.Chrome()# 打开目标网页
driver.get("你的目标网页URL")# 使用find_elements方法提取任意标签下的所有元素,例如提取所有的<p>标签
elements = driver.find_elements(By.TAG_NAME, 'p')# 遍历所有找到的<p>标签,并打印它们的文本
for element in elements:print(element.text)# 关闭浏览器
driver.quit()

在这个例子中,find_elements(By.TAG_NAME, 'p')会找到页面上所有的<p>标签,并将它们作为一个元素列表返回。

然后,通过遍历这个列表,你可以使用.text属性来获取每个<p>标签的文本内容。

如果你想要提取其他标签的文本,只需将'p'替换为你想要的标签名即可。

在这里插入图片描述

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

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

相关文章

Bash语言的语法

Bash语言简介与应用 Bash&#xff08;Bourne Again SHell&#xff09;是一种Unix Shell和命令语言&#xff0c;在Linux、macOS及其他类Unix系统中被广泛使用。作为GNU项目的一部分&#xff0c;Bash不仅是对早期Bourne Shell的增强&#xff0c;还引入了许多特性和功能&#xff…

Ingress-Nginx Annotations 指南:配置要点全方面解读(下)

文章目录 1.HTTP2 Push Preload2.Server Alias3.Server snippet4.Client Body Buffer Size5.External Authentication6.Global External Authentication7.Rate Limiting8.Global Rate Limiting9.Permanent Redirect10.Permanent Redirect Code11.Temporal Redirect12.SSL Passt…

互联网路由架构

大家觉得有意义和帮助记得及时关注和点赞!!! 本书致力于解决实际问题&#xff0c;书中包含大量的架构图、拓扑图和真实场景示例&#xff0c;内容全面 且易于上手&#xff0c;是不可多得的良心之作。本书目的是使读者成为将自有网络集成到全球互联网 领域的专家。 以下是笔记内…

【Flutter_Web】Flutter编译Web第三篇(网络请求篇):dio如何改造方法,变成web之后数据如何处理

前言 Flutter端在处理网络请求的时候&#xff0c;最常用的库当然是Dio了&#xff0c;那么在改造成web端的时候&#xff0c;最先处理的必然是网络请求&#xff0c;否则没有数据去处理驱动实图渲染。 官方链接 pub https://pub.dev/packages/diogithub https://github.com/c…

Spring Boot @Conditional注解

在Spring Boot中&#xff0c;Conditional 注解用于条件性地注册bean。这意味着它可以根据某些条件来决定是否应该创建一个特定的bean。这个注解可以放在配置类或方法上&#xff0c;并且它会根据提供的一组条件来判断是否应该实例化对应的组件。 要使用 Conditional注解时&#…

项目上传到gitcode

首先需要在个人设置里面找到令牌 记住自己的账号和访问令牌&#xff08;一长串&#xff09;&#xff0c;后面git要输入这个&#xff0c; 账号是下面这个 来到自己的仓库 #查看远程仓库&#xff0c;是不是自己的云仓库 git remote -v # 创建新分支 git checkout -b llf # 三步…

【Rust自学】6.4. 简单的控制流-if let

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 6.4.1. 什么是if let if let语法允许将if和let组合成一种不太冗长的方式来处理与一种模式匹配的值&#xff0c;同时忽略其余模式。 可以…

【Git学习】windows系统下git init后没有看到生成的.git文件夹

[问题] git init 命令后看不到.git文件夹 [原因] 文件夹设置隐藏 [解决办法] Win11 win10

vscode添加全局宏定义

利用vscode编辑代码时&#xff0c;设置了禁用非活动区域着色后&#xff0c;在一些编译脚本中配置的宏又识别不了 遇到#ifdef包住的代码就会变暗色&#xff0c;想查看代码不是很方便。如下图&#xff1a; 一 解决&#xff1a; 在vscode中添加全局宏定义。 二 步骤&#xff1a…

【服务器主板】定制化:基于Intel至强平台的全新解决方案

随着数据处理需求不断增长&#xff0c;服务器硬件的发展也在持续推进。在这一背景下&#xff0c;为用户定制了一款全新的基于Intel至强平台的服务器主板&#xff0c;旨在提供强大的计算能力、优异的内存支持以及高速存储扩展能力。适用于需要高性能计算、大规模数据处理和高可用…

php怎么去除数点后面的0

在PHP中&#xff0c;我们可以使用几种方法来去除数字小数点后的0。 方法一&#xff1a;使用intval函数 intval函数可以将一个数字转化为整数&#xff0c;另外&#xff0c;它也可以去除小数点后面的0。 “php $number 123.4500; $number intval($number); echo $number; // 输…

数字后端培训项目Floorplan常见问题系列专题续集1

今天继续给大家分享下数字IC后端设计实现floorplan阶段常见问题系列专题。这些问题都是来自于咱们社区IC后端训练营学员提问的问题库。目前这部分问题库已经积累了4年了&#xff0c;后面会陆续分享这方面的问题。 希望对大家的数字后端学习和工作有所帮助。 数字后端项目Floor…

【递归,搜索与回溯算法 综合练习】深入理解暴搜决策树:递归,搜索与回溯算法综合小专题(二)

优美的排列 题目解析 算法原理 解法 &#xff1a;暴搜 决策树 红色剪枝&#xff1a;用于剪去该节点的值在对应分支中&#xff0c;已经被使用的情况&#xff0c;可以定义一个 check[ ] 紫色剪枝&#xff1a;perm[i] 不能够被 i 整除&#xff0c;i 不能够被 per…

Java中各种数组复制方式的效率对比

在 Java 中&#xff0c;数组复制是一个常见的操作&#xff0c;尤其是在处理动态数组&#xff08;如 ArrayList&#xff09;时。Java 提供了多种数组复制的方式&#xff0c;每种方式在性能和使用场景上都有所不同。以下是对几种主要数组复制方式的比较&#xff0c;包括 System.a…

视频会议是如何实现屏幕标注功能的?

现在主流的视频会议软件都有屏幕标注功能&#xff0c;屏幕标注功能给屏幕分享者讲解分享内容时提供了极大的方便。那我们以傲瑞视频会议&#xff08;OrayMeeting&#xff09;为例&#xff0c;来讲解屏幕标注是如何实现的。 傲瑞会议的PC端&#xff08;Windows、信创Linux、银河…

Framework开发入门(一)之源码下载

一、使用Linux操作系统的小伙伴可以跳转到官网链接按提示操作 官网源码地址&#xff1a;下载源代码 | Android Open Source Project 1.创建一个空目录来存放您的工作文件。为其指定一个您喜欢的任意名称&#xff1a; mkdir WORKING_DIRECTORYcdWORKING_DIRECTORY …

改进爬山算法之四:概率爬山法(Probabilistic Hill Climbing,PHC)

概率爬山法(Probabilistic Hill Climbing,PHC)是一种局部搜索算法,它结合了随机性和贪婪搜索的特点,是对爬山算法(Hill Climbing Algorithm)的一种变体或扩展。与传统的爬山法不同,PHC不是总是选择最优的邻居作为下一步的移动,而是以一定的概率选择最优邻居,同时以一…

Unity中实现人物残影效果

今天火柴人联盟3公测了&#xff0c;看到一个残影的效果&#xff0c;很有意思&#xff0c;上网查询了一下实现方式&#xff0c; 实现思路&#xff1a; 将角色的网格复制出来&#xff0c;然后放置到新建的物体的MeshFilter组件上&#xff0c;每隔几十毫秒在玩家的位置生成一个&a…

C#实现调用DLL 套壳读卡程序(桌面程序开发)

背景 正常业务已经支持 读三代卡了&#xff0c;前端调用医保封装好的服务就可以了&#xff0c;但是长护要读卡&#xff0c;就需要去访问万达&#xff0c;他们又搞了一套读卡的动态库&#xff0c;为了能够掉万达的接口&#xff0c;就需要去想办法调用它们提供的动态库方法&…

自动挡有什么优势

自动挡汽车相比手动挡汽车具有多方面的优势&#xff0c;以下是对这些优势的详细阐述&#xff1a; 一、操作简便性 无需手动换挡&#xff1a;自动挡汽车不需要驾驶员手动操作离合器和换挡杆&#xff0c;只需通过油门和刹车踏板来控制车速&#xff0c;大大降低了驾驶难度。这使…