BeatifulSoup
什么是BeatifulSoup
- BeautifulSoup,和lxml一样,是一个html的解析器
主要功能也是解析和提取数据
优缺点
- 效率没有lxml的效率高
- 接口设计人性化,使用方便
安装
- pip install bs4
导入
- from bs4 import BeautifulSoup
创建对象
-
网上文件生成对象
- soup = BeautifulSoup(‘网上下载的字符串’, ‘lxml’)
-
本地文件生成对象
- soup = BeautifulSoup(open(‘filename.html’), ‘lxml’)
节点定位
-
根据标签名查找节点
-
soup.a 【注】只能找到第一个a
查找所有a标签节点
-
-
函数
-
find(返回一个对象)
【注】
-
不能使用name属性查找
-
class_后面有下划线
3.可以使用自定义属性,比如age
-
find(‘a’):只找到第一个a标签
-
find(‘a’, title=‘名字’)
-
find(‘a’, id=‘名字’)
-
find(‘a’, class_=‘名字’)
#需要重点注意_
-
-
find_all(返回一个列表)
- find_all(‘a’) 查找到所有的a
- find_all([‘a’, ‘span’]) 返回所有的a和span
- find_all(‘a’, limit=2) 只找前两个a
-
select(根据选择器得到节点对象)【推荐】
在 CSS 中,选择器是一种模式,用于选择需要添加样式的元素。
select选择器,接受一个以字符串表示的路径
“//div[@class]”
-
element
div
-
p
选择所有
元素。
-
-
.class
[@class =]
@class-
.firstname
选择 class=“firstname” 的所有元素
-
-
#id
[@id=]
@id-
#firstname
选择 id=“firstname” 的所有元素
-
-
属性选择器
-
[attribute]
-
[target]
选择带有 target 属性所有元素
eg.
li[class] 选择带有class属性的所有li标签
-
-
[attribute=value]
-
[target=blank]
选择 target=“blank” 的所有元素。
div[target=blank]
-
-
-
层级选择器
-
element element
-
div p
类似xpath中的//
选择
元素内部的所有元素
-
-
element>element
-
div>p
选择
元素的所有直接子元素。
-
-
element,element
-
div,p
选择所有
元素和所有元素
所有标签在同一个双引号中
-
-
-
-
-
获取子孙节点
-
contents:返回的是一个列表
【注意】中间也会得到很多的换行符
-
descendants:返回的是一个生成器
-
节点信息
-
获取节点内容
-
obj.string
-
obj.get_text()【推荐】
这是一个段落
-
-
节点的属性
-
tag.name 获取标签名
tag = find('li)
tag.name -
tag.attrs将属性值作为一个字典返回
{属性名称:属性值}
-
-
获取节点属性
- obj.attrs.get(‘title’)
- obj.get(‘title’)
- obj[‘title’]
节点类型
判断节点类型
import bs4
ul_list = soup.ul.contents
for ul in ul_list:
# print(type(ul),str(ul))
if type(ul) == bs4.element.Tag:
print(ul)
- bs4.BeautifulSoup 根节点类型
- bs4.element.NavigableString 连接类型
- bs4.element.Tag 节点类型
- bs4.element.Comment 注释类型