xpath--更直观的数据解析
2018-07-03 01:12:09来源:博客园 阅读 ()
学习过程参考原文章: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]: '\n Everyday Italian\n Giada De Laurentiis\n 2005\n 30.00\n '
选取多个路径
所有结果集合为一个列表返回。
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
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- python_0基础开始_day07 2019-08-13
- Django和前端用ajax传输json等数据 2019-08-13
- 链接 Mysql 创建 数据库和创表,增加数据 2019-08-13
- Python数据基础类型-列表 2019-08-13
- JavaScript获取Django模板中指定键值的数据,使用过滤器 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash