BeautifulSoup的find()和findAll()
2024-08-22 00:15:41
BeautifulSoup的提供了两个超级好用的方法(可能是你用bs方法中最常用的)。借助这两个函数,你可以通过表现的不同属性轻松过滤HTML(XML)文件,查找需要的标签组或单个标签。
首先find(),findAll()是当有了bs对象之后,获取标签组或者单个标签的函数。find()找到第一个满足条件的标签就返回,findAll()找到所有满足条件的标签返回。
看一下两个函数的参数,findAll多了一个limit参数。 #参数不是每次用的时候需要把所有参数都要写出来
findAll(tag,atributes,recursive,text,limit,keywords)
find(tag,atributes,recursive,text,keywords)
实例中多用findAll()函数,因为find()函数只返回一个,没有代表性。
①参数tag,可以使用参数tag表明需要查找的标签类型,tag可以是多个:
.findAll({'h1'}) #返回h1标签列表
.findAll({'h1','h2','h3'}) #返回h1-h3标题标签列表
.findAll({'h1','h2','h3','h4','h5','h6','h7'}) #返回所有标题标签的列表
②参数attribute,使用标签内的若干属性对应的属性值进行标签查找,属性值可以是多个
.findAll('span',{'class':{'green','red'}}) #返回class属性为red和green的span标签列表
③参数recursive,是否使用递归方法遍历每一个子标签,默认是开启,True。如果设置为False,findAll()只查找文档的一级标签。一般使用中,不用去动这个参数
④参数text,根据标签的文本内容去查找标签列表,通常配合正则表达式使用
nameList = bsObj.findAll(text='the prince') #匹配所有标签文本内容为‘the prince’的标签列表
nameList = bsObj.findAll(text=re.compile('the*')) #匹配所有标签文本内容为‘the’开头的标签列表,使用了正则表达式re,正则表达式在此文中不做讲解
⑤参数limit,范围限制参数,显然只能用于findAll()函数。就是限定返回的个数,比如要抽取多少个标签信息做样本之类的
⑥参数keyword,标签内指定属性的标签列表#与attribute参数相似,有一个例外就是用class属性查找标签的时候,直接findAll(class=‘green’)会报错,因为class是保留字
bsObj.findAll(id='text')
bsObj.findAll(class='text') #会报错
bsObj.findAll(class_='text')解决方案
最新文章
- 将Mininet与真实网络相连接
- AP模块的发票过账后关联对应的凭证编号。
- (剑指Offer)面试题17:合并两个排序的链表
- WPF容器控件
- cocos2d-x3.9 默认是 gnustl_static 配置,但是 这个库缺少c++的基础功能... c++_static 功能全面些
- A Byte of Python 笔记(11)异常:try..except、try..finally
- 后台前台json传递数据的方式两种方式 $.get, $.getJSON
- mysql之 innobackupex备份+binlog日志的完全恢复(命令行执行模式)
- 整理pandas操作
- Centos系统运行nodejs
- Java面试知识点之线程篇(一)
- Android GsmCellLocation.getCellLocation返回NULL
- IPython:一种交互式计算和开发环境
- python-代理模式
- OpenGL笔记(三) GLSL语法与内建函数
- DevOps简介
- JQuery的ajaxFileUpload的使用
- [H5-Compress-Image]利用canvas实现 javascript 图片压缩处理_基于requirejs模块化的代码实现
- 重新学习之spring第二个程序,配置AOP面向切面编程
- windows7用WMware安装Linux虚拟机详细步骤