xpath
1、xml学习
xml:是一种数据格式,和json的位置一样,前后端交互
xml和html的区别:
1>:xml:被设计用来传输和存储数据;html:被设计用来显示数据
2>:xml标签可以自定义,html是官方规定好的标签
3>:xml是纯本文语言
xml的语法:
1>:必须有关闭标签
2>:标签名对大小写敏感
3>:属性值必须加双引号
2、xpath
xpath:用来解析xml数据的;和html有啥关系呢?
html和xml都是标记语言,有人搞了一套库,叫做lxml,实现功能来解析数据
xpath最有用的路径表达式
常见的路径表达式:
bookstore/book :从bookstore下面查找book,book是直接子节点
bookstore//book:从bookstore下面查找所有的book
//book:从整个文档中查找所有的book节点
//@lang:查找所有的有lang属性节点
bookstore/book[1]:取出第一个直接子节点book
bookstore/book[last()]:取出最后一个直接子节点book
bookstore/book[last()-1]:取出倒数第二个直接子节点book
bookstore/book[position()<3]:取出前两个直接子节点book
//title[@lang='eng']:选取lang属性值为eng的title属性
*:匹配任何元素节点
@*:匹配所有属性节点
bookstore/*:选取bookstore元素的所有直接子节点
//*:查找所有节点
//title [@*]:查找有属性title节点
函数:
contains starts-with
3、xpath在html中的应用
1>:属性筛选
例:input[@id='kw']
注意:如果属性值多,需要全部复制进去
2>:层级和索引筛选
例:
3>:取文本和属性
属性:
文本内容:
· 4>:函数
starts-with
属性以XX开头
文本以XX开头
contains
属性包含XX:
文本包含XX:
用法截图:
4、在代码中使用
首先:需要导入
from lxml importetree
过程:首先根据etree里面的方法将html格式的字符串搞成一个对象 tree,然后就可以使用tree里面的方法xpath。
本地文件:etree.parse('文件名')
网络文件: etree.HTML('网页字符串')
xpath方法返回的是列表,需要通过下标进行提取
如果标签里面还有子标签,获取使用方式:
ret = tree.xpath('//div[@class="star"]//text()')
然后手动拼接列表即可
ret = tree.xpath('//div[@class="star"]')[0].xpath('string(.)')
直接得到标签里面所有的内容