一、BeautifulSoup4
1.1 Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种:Tag,NavigableString,BeautifulSoup,Comment。
二、 Tag对象:与xml或html原生文档中的对象相同
2.1 Tag对象的属性name:.name获取名字。
2.2 Tag对象的属性attributes:可以被添加、删除、修改
三、 BeautifulSoup对象:表示的是一个文档的全部内容,一般可以当作tag对象。他支持遍历文档树,和搜索文档树中的大部分方法。他没有name,和attribute属性。(他有个特殊属性:.name返回[document])
四、方法:遍历文档树
4.1 子节点(bf中字符串没有子节点):操作文档树最简单的方法就是告诉Tag的name,例如:想获取<head>标签,只需 soup.head
soup.标签名
.contents 将tag的子节点以列表方式输出、.children 可以对Tag的子节点进行循环。(输出子节点)
.descondants 可以对Tag的所有子孙节点进行输出。
.string 如果tag只有NavigableString类型子节点,可以用.stirng获取子节点。
.stripped_strings可以去除多余的空格。
4.2 父节点
.parent 来获取父节点,文档的顶层节点比如的父节点是BeautifulSoup对象,BeautifulSoup对象的.parent是None。
.parents 获取所有父节点。
.next_sibling 和 .previous_sibling
.next_sibling和.previous_sibling 属性来查询兄弟节点
.next_siblings 和 .previous_siblings 通过.next_siblings和.previous_siblings属性可以对当前节点的兄弟节点迭代输出
.next_element属性指向解析过程中下一个被解析的对象(字符串或tag),结果可能与.next_sibling相同,但通常是不一样的.
.previous_element属性刚好与.next_element相反,它指向当前被解析的对象的前一个解析对象.
.next_elements和.previous_elements的迭代器就可以向前或向后访问文档的解析内容,就好像文档正在被解析一样
4.3 过滤器
1.字符串
2. 正则表达式
3. 列表
4. true :True可以匹配任何值,下面代码查找到所有的tag,但是不会返回字符串节点
4.4 方法
如果没有合适过滤器,那么还可以定义一个方法,方法只接受一个元素参数[4],如果这个方法返回True表示当前元素匹配并且被找到,如果不是则反回False
1. find_all()
find_all(name,attrs,recursive,text,**kwargs)
find_all()方法搜索当前tag的所有tag子节点,并判断是否符合过滤器的条件.
2. name
name参数可以查找所有名字为name的tag,字符串对象会被自动忽略掉.
3. keywork
4. 按css搜索 按照CSS类名搜索tag的功能非常实用
soup.find_all("a",class_="sister")
soup.find_all(class_=re.compile("itl"))
soup.find_all("a",attrs={"class":"sister"})
5.text参数
通过text参数可以搜搜文档中的字符串内容.
6. limit参数
7. recursive
调用tag的find_all()方法时,Beautiful Soup会检索当前tag的所有子孙节点,如果只想搜索tag的直接子节点,可以使用参数recursive=False.
待续。。。
网友评论