概述
BeautifulSoup简介
介绍
lxml 只会局部遍历,而Beautiful Soup 是基于HTML DOM的,会载入整个文档,解析整个DOM树,因此时间和内存开销都会大很多,所以性能要低于lxml。
BeautifulSoup 用来解析 HTML 比较简单,API非常人性化,支持CSS选择器、Python标准库中的HTML解析器,也支持 lxml 的 XML解析器。
使用 pip 安装即可:pip install beautifulsoup4
bs四大对象
Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种:
- Tag
- NavigableString
- BeautifulSoup
- Comment
-
Tag
Tag对应 HTML 中的一个个标签
Tag,它有两个重要的属性,是 name 和 attrs
name是标签名,attrs是标签的属性
注意:BeautifulSoup直接调用Tag,只会获得Html中第一个相应的Tag数据 -
NavigableString
标签中的内容数据
使用string属性获取该对象,例如:soup.p.string 获得bs中p标签的内容 -
BeautifulSoup
BeautifulSoup 对象表示的是一个文档的内容。大部分时候,可以把它当作 Tag 对象,是一个特殊的 Tag,与Tag有相同的 name,attrs属性 -
Comment
Comment 对象是一个特殊类型的 NavigableString 对象,其输出的内容不包括注释符号。
实际就是如过内容中有注释符号,soup.p.string代码获得变无注释符号,类型为Comment而不是NavigableString。
节点集合
.content
属性
tag 的 .content 属性可以将tag的子节点以列表的方式输出.children
属性
返回的是 list 生成器对象.descendants
属性
.contents 和 .children 属性仅包含tag的直接子节点,.descendants 属性可以对所有tag的子孙节点进行递归循环,和 children类似。如soup.descendants
特殊属性
如果tag只有一个 NavigableString 类型子节点,那么这个tag可以使用 .string 得到子节点。如果一个tag仅有一个子节点,那么这个tag也可以使用 .string 方法,输出结果与当前唯一子节点的 .string 结果相同。
通俗点说就是:如果一个标签里面没有标签了,那么 .string 就会返回标签里面的内容。如果标签里面只有唯一的一个标签了,那么 .string 也会返回最里面的内容。
下面例子解释string属性、多个标签只能获得第一个标签和上述特殊属性
例如:
<html><head><title>The Dormouse's story</title></head>
<a href="http://example.com/elsie" class="sister" id="link1"><!-- Elsie --></a>
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a>
print(soup.head.string)
后台打印:The Dormouse's story
print(soup.a.string)
后台打印:Elsie
搜索文档树
find_all(name, attrs, recursive, text, **kwargs)
1、 name 参数
name 参数可以查找所有名字为 name 的tag,字符串对象会被自动忽略掉
A.传字符串
最简单的过滤器是字符串.在搜索方法中传入一个字符串参数,Beautiful Soup会查找与字符串完整匹配的内容
B.传正则表达式
如果传入正则表达式作为参数,Beautiful Soup会通过正则表达式的 match() 来匹配内容.
C.传列表
如果传入列表参数,Beautiful Soup会将与列表中任一元素匹配的内容返回
2、 keyword 参数
只能使用标签中属性id
,不能用name和class属性,使用5属性查找,如:soup.find_all(id=‘link2’)
3、 text 参数
通过 text 参数可以搜搜文档中的字符串内容,与 name 参数的可选值一样, text 参数接受 字符串 , 正则表达式 , 列表select()
1、通过标签名查找soup.select('title')
2、通过类名查找soup.select('.sister')
3、通过 id 名查找soup.select('#link1')
4、组合查找soup.select('p #link1')
组合查找即和写 class 文件时,标签名与类名、id名进行的组合原理是一样的,例如查找 p 标签中,id 等于 link1的内容,二者需要用空格分开
5、属性查找
查找时还可以加入属性元素,属性需要用中括号括起来,注意属性和标签属于同一节点,所以中间不能加空格,否则会无法匹配到
soup.select('a[class="sister"]')
soup.select('a[name="name"]')
soup.select('p a[href="http://example.com/elsie"]')
最后
以上就是秀丽羽毛为你收集整理的BeautifulSoup简介BeautifulSoup简介的全部内容,希望文章能够帮你解决BeautifulSoup简介BeautifulSoup简介所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复