Python3中BeautifulSoup解析html常用函数

1,初始化:

soup = BeautifulSoup(html)# html为html源代码字符串,type(html) == str

2,用tag获取相应代码块的剖析树:

 

Python3中BeautifulSoup解析html常用函数

contents属性是一个列表,里面保存了该剖析树的直接儿子,如:

 

Python3中BeautifulSoup解析html常用函数

3,用contents[], parent, nextSibling, previousSibling寻找父子兄弟tag:

  beautifulSoup提供了几个简单的方法直接获取当前tag块的父子兄弟。

 假设我们已经获得了body这个tag块,我们想要寻找<html>, <head>, 第一个<p>, 第二个<p>这四个tag块:

 

Python3中BeautifulSoup解析html常用函数

4,用find, findParent, findNextSibling, findPreviousSibling寻找祖先或者子孙 tag:

  find方法(我理解和findChild是一样的),就是以当前节点为起始,遍历整个子树,找到后返回。

而这些方法的复数形式,会找到所有符合要求的tag,以list的方式放回。他们的对应关系是:find->findall, findParent->findParents, findNextSibling->findNextSiblings...,如:

 

Python3中BeautifulSoup解析html常用函数

5,find的几种用法,其他的类比: find(name=None, attrs={}, recursive=True, text=None, **kwargs),文档参考:https://www.crummy.com/software/BeautifulSoup/bs3/documentation.zh.html#The%20basic%20find%20method:%20findAll%28name,%20attrs,%20recursive,%20text,%20limit,%20**kwargs%29)

 

 (1).搜索tag:

 

Python3中BeautifulSoup解析html常用函数

 (2),搜索属性(attrs):

 

Python3中BeautifulSoup解析html常用函数

 (3),搜索文字(text):

           注意:文字的搜索会导致其他搜索给的值如:tag, attrs都失效。

                方法与搜索tag一致;

 (4),recursive, limit:

      recursive=False表示只搜索直接儿子,否则搜索整个子树,默认为True。

     当使用findAll或者类似返回list的方法时,limit属性用于限制返回的数量,如findAll('p', limit=2): 返回首先找到的两个tag