BeautifulSoup中find()和findAll()的区别

版权声明:站在巨人的肩膀上学习。 https://blog.csdn.net/zgcr654321/article/details/82845463

BeautifulSoup的find()和findAll()两个方法可以通过HTML代码中的不同属性轻松过滤HTML(XML)文件,查找需要的标签组或单个标签。

find():

获取传入的HTML对象的第一个满足条件的标签就返回。标签组或者单个标签的函数。

函数原型:find(tag,atributes,recursive,text,keywords)

参数tag:表明需要查找的标签类型,tag可以是多个。

如:

.findAll({'h1'}) #返回h1标签列表
.findAll({'h1','h2','h3'}) #返回h1-h3标题标签列表
.findAll({'h1','h2','h3','h4','h5','h6','h7'}) #返回所有标题标签的列表

参数attributes:使用标签内的若干属性对应的属性值进行标签查找,属性值可以是多个。

注意:

你可以使用soup.find(“tagName”, { “class” : “cssClass” })搜索CSS class,这个字符串默认处理为CSS的class的参数值

如:

.findAll('span',{'class':{'green','red'}})  #返回class属性为red和green的span标签列表

参数recursive:是否使用递归方法遍历每一个子标签,默认是开启,True。如果设置为False,findAll()只查找文档的一级标签。一般使用中,不用改动这个参数的默认值。

参数text:根据标签的文本内容去查找标签列表,通常配合正则表达式使用。

扫描二维码关注公众号,回复: 3447601 查看本文章

如:

nameList = bsObj.findAll(text='the prince') #匹配所有标签文本内容为‘the prince’的标签列表
nameList = bsObj.findAll(text=re.compile('the*')) #匹配所有标签文本内容为‘the’开头的标签列表,使用了正则表达式re

参数keywords:标签内指定属性的标签列表。与attribute参数相似,有一个例外就是用class属性查找标签的时候,直接findAll(class=‘green’)会报错,因为class是保留字。

如:

bsObj.findAll(id='text')
bsObj.findAll(class='text')  #会报错
bsObj.findAll(class_='text')#正确方案

findAll():

获取传入的HTML对象的所有满足条件的标签然后返回。

函数原型:findAll(tag,atributes,recursive,text,limit,keywords)

参数tag:表明需要查找的标签类型,tag可以是多个。

如:

.findAll({'h1'}) #返回h1标签列表
.findAll({'h1','h2','h3'}) #返回h1-h3标题标签列表
.findAll({'h1','h2','h3','h4','h5','h6','h7'}) #返回所有标题标签的列表

参数attributes:使用标签内的若干属性对应的属性值进行标签查找,属性值可以是多个。

注意:

你可以使用soup.find(“tagName”, { “class” : “cssClass” })搜索CSS class,这个字符串默认处理为CSS的class的参数值

如:

.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()函数。限定返回的个数,比如要抽取多少个标签信息做样本。

参数keywords:标签内指定属性的标签列表。与attribute参数相似,有一个例外就是用class属性查找标签的时候,直接findAll(class=‘green’)会报错,因为class是保留字。

如:

bsObj.findAll(id='text')
bsObj.findAll(class='text')  #会报错
bsObj.findAll(class_='text')#正确方案

猜你喜欢

转载自blog.csdn.net/zgcr654321/article/details/82845463