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--更直观的数据解析的主要内容,如果未能解决你的问题,请参考以下文章

Perl,如何解析 XML 文件,xpath

python爬虫基础04-网页解析库xpath

使用 CSS 或 XPath 选择器解析 HTML?

Python Xpath的解析,应用

用DOM解析XML ,用xpath快速查询XML节点

2023爬虫学习笔记 -- 优化xpath解析代码