BeautifulSoup库之find_all函数

  BeautifulSoup将复杂的HTML文档转换成一个复杂的树形结构.每个节点都是Python对象.所有对象可以归纳为四种:Tag , NavigableString , BeautifulSoup , Comment .

    1.Tag对象最重要的属性:Name:标签的名字;attributes:属性(用class指代)

    2.BeautifulSoup 对象表示的是一个文档的全部内容.大部分时候,可以把它当作 Tag 对象,它支持 遍历文档树 和 搜索文档树 中描述的大部分的方法.因为 BeautifulSoup 对象并不是真正的HTML或XML的tag,所以它没有name和attribute属性.但有时查看它的 .name 属性是很方便的,所以 BeautifulSoup 对象包含了一个值为 “[document]” 的特殊属性 .name

    3.字符串常被包含在tag内.Beautiful Soup用 NavigableString 类来包装tag中的字符串,如果想在Beautiful Soup之外使用 NavigableString 对象,需要调用 unicode() 方法,将该对象转换成普通的Unicode字符串,否则就算Beautiful Soup已方法已经执行结束,该对象的输出也会带有对象的引用地址.这样会浪费内存.

    4.Comment 对象是一个特殊类型的 NavigableString 对象,用来完成文本注释.

  既然BeautifulSoup将html文档转换为复杂的树形结构,然后来介绍如何遍历html文档树:

    子节点:.contents将子节点以列表的方式输出(含内容);.children返回子节点的列表生成器,可以遍历输出;contents和children只查找第一个子节点,而.descendants可对所有子节点进行递归循环;

    父节点:.parent 属性来获取某个标签或字符串的父节点;.parents 属性可以递归得到元素的所有父辈节点

    兄弟节点:.next_sibling获取下一个兄弟节点; .previous_sibling获取前一个兄弟节点,同样加s返回所有前或者后兄弟的列表生成器,可遍历输出.

  接下来介绍find_all()函数,首先要明确find_dall总返回一个列表,如果没有找到则返回空:BeautifulSoup提供了强大的搜索函数find 和findall,这里的两个方法(findAll和 find)仅对Tag对象以及,顶层剖析对象有效。其标准引用形式为:findAll(name, attrs, recursive, text, limit, **kwargs)

  1.通过标签名查找:

1 for link in soup.find_all('a'): #soup.find_all返回的为列表
2     print(link.get('href'))

  2.通过标签属性值查找:

  

1 pid=soup.findall('p',id='hehe')  #通过tag的id属性搜索标签
 #print(soup.find_all(attrs={'class':'footer'}))

  3.通过re正则表达式搜索tag标签内容:

pid=soup.findAll(id=re.compile("he$")) #正则表达式的使用

 

 

    

 

 

---恢复内容结束---

posted @ 2018-11-24 12:04  做条快乐的咸鱼  阅读(12487)  评论(0编辑  收藏  举报