首页 > 代码库 > 爬虫库之BeautifulSoup学习(四)

爬虫库之BeautifulSoup学习(四)

探索文档树:

find_all(name,attrs,recursive,text,**kwargs)

方法搜索当前tag的所有tag子节点,并判断是否符合过滤器的条件

 

1、name参数,可以查找所有名字为name的tag,字符串对象会被自动忽略掉。

1) 传字符串

最简单的过滤器是字符串.在搜索方法中传入一个字符串参数,Beautiful Soup会查找与字符串完整匹配的内容.

下面的例子用于查找文档中所有的<b>标签

soup.find_all(‘b‘)

# [<b>The Dormouse‘s story</b>]

 

2)传正则表达式

如果传入正则表达式作为参数,Beautiful Soup会通过正则表达式的 match() 来匹配内容.

下面例子中找出所有以b开头的标签,这表示<body>和<b>标签都应该被找到

import re

for tag in soup.find_all(re.compile("^b")):

  print tag.name

#body

#b

 

3)传列表

如果传入列表参数,Beautiful Soup会将与列表中任一元素匹配的内容返回.下面代码找到文档中所有<a>标签和<b>标签

soup.find_all(["a","b"])

# [<b>The Dormouse‘s story</b>,
# <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
# <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,
# <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]

 

4)传True

可以匹配任何值,下面代码查找到所有的tag,但是不会返回字符串节点

5)传方法

 

2.keyword参数

  注意:如果一个指定名字的参数不是搜索内置的参数名,搜索时会把该参数当作指定名字tag的属性来搜索,如果包含一个名字为 id 的参数,Beautiful Soup会搜索每个tag的”id”属性

  soup.find_all(id=‘link2‘)

  # [<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>]

   

  如果传入href参数,BeautifulSoup会搜索每个tag的"href"属性

  soup.find_all(href=http://www.mamicode.com/re.compile("elsie"))

 

  使用多个指定名字的参数可以同时过滤tag的多个属性

  soup.find_all(href=http://www.mamicode.com/re.compile("elsie"),id=‘link1)

  

  

 

 

 

 

 

 

爬虫库之BeautifulSoup学习(四)