码迷,mamicode.com
首页 > 其他好文 > 详细

xpath--更直观的数据解析

时间:2018-06-30 10:57:33      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:语言   doc   category   class   name   body   title   小技巧   lan   

学习过程参考原文章: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

 

xpath--更直观的数据解析

标签:语言   doc   category   class   name   body   title   小技巧   lan   

原文地址:https://www.cnblogs.com/pyven/p/9245907.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!