正文
#这里得到的就是None,因为这里的html中有很多的子标签
get_text()
可以获得一个标签中的所有文本内容,包括子孙节点的内容,这是最常用的方法
搜索文档树
find_all( name , attrs , recursive , text , **kwargs )
find_all是用于搜索节点中所有符合过滤条件的节点
1. name参数:是Tag的名字,如p,div,title …..
soup.find_all("p") 查找所有的p标签,返回的是[
The Dormouse's story
],可以通过遍历获取每一个节点,如下:
ps
=
soup
.
find_all
(
"p"
)
for
p
in
ps
:
print
p
.
get
(
'class'
)
#得到p标签下的class属性
传入正则表达式:soup.find_all(re.compile(r’^b’)查找以b开头的所有标签,这里的body和b标签都会被查到
传入类列表:如果传入列表参数,BeautifulSoup会将与列表中任一元素匹配的内容返回.下面代码找到文档中所有
标签和
标签
soup.find_all(["a", "b"])
2. KeyWords参数,就是传入属性和对应的属性值,或者一些其他的表达式
-
soup.find_all(id='link2'),这个将会搜索找到所有的id属性为link2的标签。传入正则表达式soup.find_all(href=re.compile("elsie")),这个将会查找所有href属性满足正则表达式的标签
-
传入多个值:soup.find_all(id='link2',class_='title') ,这个将会查找到同时满足这两个属性的标签,这里的class必须用class_传入参数,因为class是python中的关键词
-
有些属性不能通过以上方法直接搜索,比如html5中的data-*属性,不过可以通过attrs参数指定一个字典参数来搜索包含特殊属性的标签,如下:
# [
foo!
]
data_soup
.
find_all
(
attrs
=
{
"data-foo"
:
"value"
})
#注意这里的atts不仅能够搜索特殊属性,亦可以搜索普通属性
soup
.
find_all
(
"p"
,
attrs
=
{
'class'
:
'title'
,
'id'
:
'value'
})
#相当与soup.find_all('p',class_='title',id='value')
3. text参数:通过 text 参数可以搜搜文档中的字符串内容.与 name 参数的可选值一样, text 参数接受 字符串 , 正则表达式 , 列表, True