xpath--更直观的数据解析
Posted pyven
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了xpath--更直观的数据解析相关的知识,希望对你有一定的参考价值。
学习过程参考原文章:https://www.jianshu.com/p/90e4b83575e2
XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。
相比于BeautifulSoup来说,xpath更加直观,更加便捷,
有个小技巧是可以直接通过浏览器的开发者工具复制出xpath路径。
通常xpath的使用都是通过安装lxml库来使用的。win和linux都可以直接安装
pip install lxml
使用的时候直接
from lxml import etree page = etree.html(html_doc) # html_doc为html文档
语法
表达式 | 描述 |
---|---|
nodename | 选取此节点的子节点。 |
/ | 从根节点选取。 |
// | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 |
. | 选取当前节点。 |
.. | 选取当前节点的父节点。 |
@ | 选取属性。 |
1.读取当前节点的子节点
In [1]: page.xpath(‘head‘) Out[1]: [<Element head at 0x111c74c48>]
获取当前节点(即page这个节点)的子节点,无法获取子孙节点。
2.根节点开始查询
In [2]: page.xpath(‘/html‘) Out[2]: [<Element html at 0x11208be88>]
不管page现在处于什么节点,都从根节点开始查询
3.子孙节点的查询
In [3]: page.xpath(‘//book‘) Out[3]: [<Element book at 0x1128c02c8>, <Element book at 0x111c74108>, <Element book at 0x111fd2288>, <Element book at 0x1128da348>]
查询当前节点下所有符合要求的节点。
4.父节点的查询
In [4]: page.xpath(‘//book‘)[0].xpath(‘..‘) Out[4]: [<Element bookstore at 0x1128c0ac8>]
获取查询到节点的父节点。(根节点没有父节点)
5.节点的属性读取
In [5]: page.xpath(‘//book‘)[0].xpath(‘@category‘) Out[5]: [‘COOKING‘]
节点的查询
表达式 | 结果 |
---|---|
nodename[1] | 选取第一个元素。 |
nodename[last()] | 选取最后一个元素。 |
nodename[last()-1] | 选取倒数第二个元素。 |
nodename[position()<3] | 选取前两个子元素。 |
nodename[@lang] | 选取拥有名为 lang 的属性的元素。 |
nodename[@lang=‘eng‘] | 选取拥有lang属性,且值为 eng 的元素。 |
节点的通配符使用
通配符 | 描述 |
---|---|
* | 匹配任何元素(子)节点。 |
@* | 匹配任何属性节点。 |
节点中的文本获取
text()方式获取某一节点下的文本
In [1]: page.xpath(‘//book[1]/author/text()‘) Out[1]: [‘Giada De Laurentiis‘]
string()获取某一节点下的所有文本,并连接为字符串
In [1]: page.xpath(‘//book[1]/string()‘)
In [2]: page.xpath(‘string(//book[1])‘)
Out[2]: ‘ Everyday Italian Giada De Laurentiis 2005 30.00 ‘
选取多个路径
所有结果集合为一个列表返回。
In [1]: page.xpath(‘//book[1]/title/text() | //book[1]/author/text()‘) Out[1]: [‘Everyday Italian‘, ‘Giada De Laurentiis‘]
总结
另外还有轴,运算符等内容,可以参照:http://www.runoob.com/xpath/xpath-operators.html
以上是关于xpath--更直观的数据解析的主要内容,如果未能解决你的问题,请参考以下文章