lxml
库
从响应数据中抽取出目标数据的过程,就叫做数据解析
数据解析:
re,xpath,BS4,Pyquery
DOM树与xpath解析原理
xpath解析原理:根据DOM节点的结构关系,进行定位
xpath
基本语法
.:当前节点
/:根节点
//:代表任意位置
.//:从当前节点向下的任意位置匹配
nodename:**节点名**定位
nodename[@attribute='value']:根据节点的属性进行定位
@attribue:获取节点的属性值,比如获取a标签的`href`属性,直接可以`/a/@href`
text():获取节点的文本
属性匹配
- 单属性多值匹配:当节点的一个属性有多个值时,根据其中一个进行定位,
使用contains函数
- 多属性匹配:用节点的多个属性共同定位节点 and|or
按序选择
- 索引定位:[6]
**注意,索引从1开始,跟python有区别**
- 位置函数:position()
例:/li[position()>2]
- last()函数:定位最后一个,last()-1代表倒数第二个
流程
加载本地html
,需要有etree.HTMLParser
参数,注意要加括号
例:tree = etree.parser('./xpath.html',etree.HTMLParser())
加载网页html
,直接使用HTML
例:tree = etree.HTML()
然后些xpath
语法
tree.xpath('//ul[@class="pli"]/li/div/a/img/@src')
xpath
获得的结果是一个列表
#编码流程
from lxml import etree
res = requests.get(...)
tree = etree.HTML(res.text) #etree加载的是响应数据的文本形式
tree.xpath('xpath表达式')