【Python爬虫教程】第5篇-使用BeautifulSoup查找html元素几种常用方法

news2024/11/13 12:47:04

文章目录

    • 简介
    • find()和find_all()
    • 字符串
    • 通过id查找
    • 通过属性查找
    • 通过.方式查找
    • 通过CSS选择器查找
    • 通过xpath查找
    • 正则表达
    • 自定义方法
    • 总结

简介

上一篇详细的介绍了如何使用Beautiful Soup的使用方法,但是最常用的还是如何解析html元素,这里再汇总介绍下查询html元素的一些方式,比如通过id查找、通过xpath查找、通过css查找等方式的最佳实践。

find()和find_all()

这两个方法参数差不多,区别在于find返回一个,find_all可能返回多个,find底层调用的也是find_all只是设置里limit=1。所以下面讲到的一些用法不区分是find还是find_all
在这里插入图片描述

字符串

soup.find_all('b')

查找所有标签是b的tag

通过id查找

keyword: key=value的形式,value可以是过滤器:字符串 , 正则表达式 , 列表, True .

soup.find(id='xxxx')
soup.find(id=re.compile('my'))

id是标签的属性,一般用于唯一元素定位

通过属性查找

上面id其实也是tag的一个属性,所以展开就是taq的属性可以类似查找.比如:

soup.find(class='xxxx')

通过.方式查找

这种比较直观,有点像链式调用,其实能直接看出html的层级结构

soup.head.title

通过CSS选择器查找

css路径可以通过下图这种方式在页面上快速定位:
#s_xmancard_news_new > div > div.s-news-rank-wrapper.s-news-special-rank-wrapper.c-container-r > div > div > ul
在这里插入图片描述

soup.select('#s_xmancard_news_new > div > div.s-news-rank-wrapper.s-news-special-rank-wrapper.c-container-r > div > div > ul')

通过xpath查找

xpath全称为XML Path Language, 一种小型的查询语言,实现的功能与re以及bs一样,但是大多数情况会选择使用xpath。由于XPath属于lxml库模块,所以首先要安装库lxml。xpath路径查找:

//*[@id=“s_xmancard_news_new”]/div/div[1]/div/div/ul

在这里插入图片描述

from lxml import etree

selector=etree.HTML('')   # 将源码转化为能被XPath匹配的格式
# <Element html at 0x29b7fdb6708>
ret = selector.xpath('//*[@id="s_xmancard_news_new"]/div/div[1]/div/div/ul')     # 返回为一列表

正则表达

# name: 搜索name参数的值可以使任一类型的 过滤器 ,字符窜,正则表达式,列表,方法或是 True .
soup.find_all(name=re.compile('^t'))

自定义方法

# 如果没有合适过滤器,那么还可以定义一个方法,方法只接受一个元素参数 ,如果这个方法返回 True 表示当前元素匹配并且被找到,如果不是则反回 False
def has_class_but_no_id(tag):
    return tag.has_attr('class') and not tag.has_attr('id')
 
soup.find_all(has_class_but_no_id)    

或者使用匿名函数

soup.find_all(lambda tag: True if tag.has_attr("class") and tag.has_attr("id") else False)

总结

更多使用方法参考官网:https://beautifulsoup.readthedocs.io/zh-cn/v4.4.0/#id7

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

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

相关文章

识别 TON 生态系统中前10种加密资产,以bitget 钱包为例

元描述&#xff1a;想要找到下一个 100 倍加密货币投资&#xff1f;请密切关注这篇文章&#xff1b;它揭示了所有可能很快变得非常有价值的 TON 网络宝石。 由 Telegram 提供支持的 TON&#xff08;开放网络&#xff09;生态系统正在蓬勃发展&#xff01;这是一个充满激动人心的…

PHP大转盘抽奖营销微信小程序系统源码

&#x1f389;【大转盘抽奖新风尚&#xff0c;微信小程序营销新利器&#xff01;】&#x1f381; &#x1f388;一、揭秘大转盘抽奖的魔力所在✨ 在这个信息爆炸的时代&#xff0c;如何让你的品牌活动脱颖而出&#xff1f;大转盘抽奖微信小程序&#xff0c;正是那把开启用户心…

捷配笔记-混合信号PCB布局设计的基本准则是什么?

混合信号PCB设计需要对模拟和数字电路有基本的了解&#xff0c;以最大限度地减少&#xff08;如果不能防止的话&#xff09;信号干扰。现代系统由数字域和模拟域均可操作的组件组成&#xff0c;这些组件必须经过精心设计&#xff0c;以确保整个系统的信号完整性。 在混合信号系…

Scott Brinker:Martech的新数据层成为营销人工智能的基础

在我们最近发布的《2024年Martech状况报告》&#xff08;State of Martech 2024 report&#xff09;中&#xff0c;我和Frans Riemersma分析了整个Martech行业发生的大量转变&#xff0c;从人工智能驱动的Martech领域的爆炸式增长&#xff0c;到Martech技术栈中「可组合性」 的…

Java+springboot+vue智慧班牌小程序源码,智慧班牌系统可以提供哪些服务?

智慧班牌全套源码&#xff0c;系统技术架构&#xff1a;Javaspringbootvue element-ui小程序电子班牌&#xff1a;Java Android演示正版授权。 智慧班牌在智慧校园的数字化建设中提供了多种服务&#xff0c;这些服务不仅丰富了校园的信息展示方式&#xff0c;还促进了家校互动…

01 Git概述

第1章&#xff1a;Git概述 一、前言 一&#xff09;什么是版本控制 ​ 版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理 ​ 版本控制最主要的功能就是追踪文件的变更 ​ 凡是需要持续修改的文档资料都可以进行版本管理 二&#xff09;多人…

打造多代理团队的新方法:Tribe AI

在现代科技的推动下&#xff0c;人工智能&#xff08;AI&#xff09;已经深入到我们生活的方方面面。从自动驾驶汽车到智能家居&#xff0c;AI的应用无处不在。今天&#xff0c;我想和大家介绍一个全新的开源项目——Tribe AI。这个项目相对较新&#xff0c;因此知道它的人并不…

【Linux】常见指令(下)

【Linux】常见指令&#xff08;下&#xff09; 通配符 *man指令cp指令echo指令cat指令&#xff08;简单介绍&#xff09;cp指令 mv指令alias指令which ctrl ccat指令linux下一切皆文件 more指令less指令head指令tail指令管道 通配符 ‘*’ 通配符’ *‘&#xff0c;是可以匹配…

Qt学生管理系统-- 数据库课程设计(付源码)

Qt学生管理系统 一、前言1.1 项目介绍1.2 项目目标 2、需求说明2.1 功能性说明2.2 非功能性说明 三、UX设计3.1 登录界面3.2 学生数据展示3.3 信息插入和更新 三、架构说明3.1 客户端结构如下3.2 数据流程图3.2.1 数据管理3.2.2 管理员登录 四、 设计说明3.1 数据库设计3.2 结构…

redis 配置文件参数详解

1、redis.conf 通用类 Redis的配置文件是一个文本文件&#xff0c;通常名为redis.conf。以下是一些常见配置项的解释和示例&#xff1a; 1、bind 127.0.0.1&#xff1a;绑定的主机地址 2、 protected-mode ,默认是开启状态&#xff0c;一般不需要修改&#xff0c;可以保证服务…

vue router 切换路由的时候,页面的动画效果,使页面切换好看,以及控制有的页面使用切换路由特效,有的页面不用

一、使用切换效果 在router文件中 useTransition: true代表需要动画 meta: { title: “新开卡预填表单”, keepAlive: true, useTransition: true }, [{path: "/",name: "Home",meta: {title: "首页",keepAlive: true,useTransition: false},c…

随机变量线弹性材料蒙特卡洛模拟

随机变量线弹性材料蒙特卡洛模拟 建模步骤参数与随机变量参数几何材料边界约束网格剖分计算研究模拟结果模型文件下载 建模步骤 新建——模型向导——二维选择物理场——固体力学——稳态——完成 参数与随机变量参数 输入参数如下&#xff1a; 全局定义——右键函数——…

探索未来视界:LC201小尺寸红外热成像机芯引领行业新变革

在当今科技飞速发展的时代&#xff0c;红外热成像技术正以前所未有的方式革新着诸多行业&#xff0c;而灵卡技术推出的LC201小尺寸红外热成像机芯&#xff0c;正是这一变革的先锋。专为体积和功耗敏感领域设计&#xff0c;LC201以超紧凑的22x22mm尺寸、轻量化设计&#xff0c;及…

实验三:图像的平滑滤波

目录 一、实验目的 二、实验原理 1. 空域平滑滤波 2. 椒盐噪声的处理 三、实验内容 四、源程序和结果 (1) 主程序&#xff08;matlab&#xff09; (2) 函数GrayscaleFilter (3) 函数MeanKernel (4) 函数MedFilter 五、结果分析 1. 空域平滑滤波 2. 椒盐噪声的处理…

手撕Vue中的RouterLink和RouterView,深入理解其底层原理(二)

前言 在之前我们已经讲过了如何手撕本文RouterLink&#xff0c;深入讲解了RouterLink的基本原理 手撕Vue中的RouterLink和RouterView&#xff0c;深入理解其底层原理&#xff08;一&#xff09; - 掘金 (juejin.cn) 接下来我们就继续手撕RouterView吧&#xff01;&#xff0…

搭建个人智能家居 7 - 空气颗粒物检测

搭建个人智能家居 7 - 空气颗粒物检测 前言说明PMS5003ESPHomeHomeAssistant结束 前言 到目前为止&#xff0c;我们这个只能家居系统添加了4个外设&#xff0c;分别是&#xff1a;LED灯、RGB灯、DHT11温度传感器和SGP30。今天继续添加环境测量类传感器“PMS5003空气颗粒物检测…

【数据集处理工具】根据COCO数据集的json标注文件实现训练与图像的文件划分

根据COCO数据集的json标注文件实现训练与图像的文件划分 一、适用场景&#xff1a;二、COCO数据集简介&#xff1a;三、场景细化&#xff1a;四、代码优势&#xff1a;五、代码 一、适用场景&#xff1a; 适用于一个常见的计算机视觉项目应用场景&#xff0c;特别是当涉及到使…

python数据可视化(6)——绘制散点图

课程学习来源&#xff1a;b站up&#xff1a;【蚂蚁学python】 【课程链接&#xff1a;【【数据可视化】Python数据图表可视化入门到实战】】 【课程资料链接&#xff1a;【链接】】 Python绘制散点图查看BMI与保险费的关系 散点图: 用两组数据构成多个坐标点&#xff0c;考察…

PXE、Kickstart和cobbler

一.系统装机 1.1 三种引导方式 启动操作系统 1.硬盘 2.光驱(u盘) 3.网络启动 pxe 1.2 系统安装过程 1.加载boot loader: Boot Loader 是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设 备、建立内存空间的映射图,从而将系统的软硬…

详解曼达拉升级:如何用网络拓扑结构扩容BSV区块链

​​发表时间&#xff1a;2024年5月24日 BSV曼达拉升级是对BSV基础设施的战略性重塑&#xff0c;意在显著增强其性能&#xff0c;运行效率和可扩容。该概念于2018年提出&#xff0c;其战略落地将使BSV区块链顺利过渡&#xff0c;从现有的基于单一集成功能组件的网络拓扑结构&am…