BS4 -->解析库
1.BeautifulSoup库介绍(了解)
BeautifulSoup库介绍
BeautifulSoup也是一个解析库
BS解析数据是依赖解析器的,BS支持的解析器有html,parser,lxml,xml,htmlSlib等,其中lxml解析器速度快,容错能力强
BS现阶段应用的解析多数是lxml
pip install bs4
# bs4的编码流程
from bs4 import BeautifulSoup
soup = BeautifulSoup(res.text,'lxml')
tag = soup.select('CSS选择器表达式')
tag = soup.nodename()
tag = soup.findall()
# xpath编码流程
from lxml import etree
tree = etree.HTML(res.text)
tag = tree.xpath()
2.BS4选择器使用
# 1.节点选择器
from bs4 import BeautifulSoup
soup = BeautifulSoup(res.text,'lxml')
tag = soup.a
# 2.方法选择器
find_all(name,attrs,text,limit):
1).soup.find_all(name='nodename'):根据节点名定位节点
2).soup.find_all(attrs={'attribute_name': 'attribute_value'}):根据属性定位, 多属性时, 一个即可定位
3).soup.find_all(text=re.compile(r'...')):根据节点文本定位, 返回文本
4).soup.find_all(name='nodename', limit=2):只返回两个结果
find(name, attrs, text, limit): 区别于find_all, find()返回的是一个对象结果, find_all()返回的是一个列表
# CSS选择器:
属性选择器:
1.根据节点名定位标签: 标签选择器
soup.select('title')
2.根据节点的class属性定位标签: class选择器(classical: 经典)
soup.select('.panel')
3.根据id属性定位标签: id选择器
soup.select('#item')
4.嵌套选择:
ul_list = soup.select('ul') # 得到的依然是一个列表数据类型
for ul in ul_list:
print(ul.select('li'))
5.层级选择器
soup.select('div > ul > li') # 单层级选择器
soup.select('div li') # 多层级选择器
# 获取节点的文本或属性:
tag_obj.string: 获取直接子文本-->如果节点内有与直系文本平行的节点, 该方法拿到的是None
tag_obj.get_text(): 获取子孙节点的所有文本
tag_obj['attribute']: 获取节点属性