BeautifulSoup库之find_all函数
Posted lh2018
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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$")) #正则表达式的使用
---恢复内容结束---
以上是关于BeautifulSoup库之find_all函数的主要内容,如果未能解决你的问题,请参考以下文章
find_all的用法 Python(bs4,BeautifulSoup)
BeautifulSoup 中“findAll”和“find_all”的区别
BeautifulSoup.find_all() 方法不适用于命名空间标签