数据的查找和提取[2]——xpath解析库的使用

xpath解析库的使用

  在上一节,我们介绍了正则表达式的使用,但是当我们提取数据的限制条件增多的时候,正则表达式会变的十分的复杂,出一丁点错就提取不出来东西了。但python已经为我们提供了许多用于解析数据的库,接下来几篇博客就给大家简单介绍一下xpath、beautiful soup以及pyquery的使用。今天首先进入xpath的学习。

  1.1实例

在引入实例之前,我们先编写一个html,如下所示:

<div><url><li class="item-0"><a href="link3.html">first item</a></li><li class="item-inactive"><a href="link3.html">second item</a></li><li class="item-1"><a href="link4.html">third item</a></li><li class="item-0"><a href="link5.html">fourth item</a></url></div>接下来我们都将围绕这段进行尝试

首先我们使用lxml库

第一步先将这段文本转换为一个etree的对象,再进行转换,输出结果,我们输出之后发现,愿文本中缺失的闭标签被自动的补齐,所以输出的是一段完整的html,如下所示:

我们可以看到最后一个li标签 被补齐了,又多出来了html和body

这就变成了一段完整的html啦~

  1.2找节点

下面主要介绍一下用xpath寻找需要的节点

      1.2.1父子节点

与正则表达式相同,xpath也拥有一个书写表达式的准则,如下所示:

/   直接的子节点

//  所有的子节点

..  父节点  

*  所有节点  

@  属性

[]  中括内是约束条件

接下来先介绍一下如何查找子节点

首先看result的值,用//表示所有的子节点,后面跟*代表把所有节点。

再看result1的值,用//表示所有子节点,后面跟li,代表所有的 li 节点。

这里还需要注意一点的是,找到的内容都是一个列表的形式,那么当然也可以用数组的方式去找啦~

第三个我们暂且不看,这就是找对应的子节点的方法。

下面我们看一下如何找父节点

其实规则和之前的一样,我们只需先找到 需要父节点的节点,然后用 .. 就可以定位到上一层的父节点了。就是这么简单。

      1.2.2 根据属性值的限制

  上面那个代码片的result2,就是在找到需要找的节点类型 li 之后,后面跟了[]来表示约束条件,括号里的内容也很好理解,就是属性href为link1.html的 li 节点

  那么有人可能会问了,如果要对一个节点有多个属性同时进行限制呢?

  其实也很简单,因为逻辑运算符在这里当然适用,只用在中括号中,用and or 不等号进行连接,就能同时对多属性进行筛选

      1.2.3 一个节点有多个属性值

  假如说现在有一段html是这样的

<li class="item-0 item"><a href="link3.html">first item</a></li>  如果再用之前的方法对class值为item-0的节点进行筛选,就找不到这个了,因为,里面不是一个属性,还有另外一个item呢,所以我们这里要用到contains这个方法,改为etree.xpath(‘//li[contains(class,"item-0")]‘)即可

       1.2.3 得到节点的内容

在前面,我们知道了如何找到需要的节点,肯定也想知道如何找到节点的内容(不然找他们干嘛呢),这里py为我们提供了一个text()的用法,我们可以看下面的一段代码

还是上面的文本,这段代码,首先找到class为item-0的节点,有两个,分别是

<li class="item-0"><a href="link3.html">first item</a></li>

<li class="item-0"><a href="link5.html">fourth item</a>

但是又一点要注意的是,在初始化的时候,这段文本已经被自动补齐了,变成如下所示:

<li class="item-0"><a href="link3.html">first item</a></li>

<li class="item-0"><a href="link5.html">fourth item</a>
</li>

先看看这段代码的输出结果

这是因为,我们用的是/ 这个符号,也就是说,只能找到 li 节点自己的文本,所以一个为空,一个为换行符

那么要找到我们想找到的,有两个途径,首先尝试第一个

先找到a节点,再输出其中的内容,代码以及结果如下:

结果:

可以看到输出了我们期待的结果直接// 输出所有的text

代码以及结果如下:

再看第二种方法,也就是

结果:

可以看到,这里还输出了换行符,也是可以理解的。

      1.2.5找到对应顺序位次的节点

  还是上面的那段文本,有很多 li 节点,其实在筛选的时候,我们可以直接用 节点?下标来查找节点,但是需要注意的是,这里的下标顺序就是从1开始的

  

  以上就是对于xpath使用的简单介绍,博主也在学习,想通过博客记录成长,有问题欢迎提出,一起讨论!下一篇介绍Beautifu Soup的使用

原文地址:https://www.cnblogs.com/HiangXuUp/p/11445233.html

时间: 2024-11-03 16:51:35

数据的查找和提取[2]——xpath解析库的使用的相关文章

JAVA调用返回XML格式数据的WebService,并通过XPath解析XML的应用

一.获取WSDL定义和endpoit地址 WSDL定义地址由开发者提供,为http://10.10.xx.xxx/webservice/Pangus.SCC.OracleEBS.WebService.dll/wsdl/IWebService 通过浏览器访问WSDL地址,可以看到endpoint地址的说明: <service name="IWebServiceservice"> <port name="IWebServicePort" binding

第四部分 解析库的使用(XPath、Beautiful Soup、PyQuery)

在网页节点中,可以定义id.class或其他属性.节点间有层次关系,网页中要通过XPath或CSS选择器定位一个或多个节点.在页面解析时,可利用XPath或CSS选择器提取某个节点,再调用相应方法获取它的正文内容或者属性,就可提取到想要的信息.在python中常用的解析库有lxml.Beautiful Soup.pyquery等.使用这些库可以很大程度上提高效率. 一 使用XPath解析库 XPath,全称XML Path Language,即XML路径语言,是一门在XML文档中查找信息的语言.

万方数据知识平台 TFHpple +Xpath解析

试了一下,基本上适合所有的检索结果. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. //获取数据 NSURL *url=[NSURL URLWithString:@"http://s.g.wanfangdata.com.cn/Paper.aspx?q=hiv"]; NSURLRequest *reque

(最全)Xpath、Beautiful Soup、Pyquery三种解析库解析html 功能概括

一.Xpath 解析 ? xpath:是一种在XMl.html文档中查找信息的语言,利用了lxml库对HTML解析获取数据. Xpath常用规则:   nodename :选取此节点的所有子节点   // :从当前节点选取子孙节点   / :从当前节点选取子节点   . : 选取当前节点   .. : 选取当前节点父节点  @ : 选取属性 1.初始化html etree.parse()是初始化html构造一个XPath解析对象: etree.tostring()是修复html文件中代码,把缺的

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

更简单高效的HTML数据提取-Xpath 本文地址:https://www.jianshu.com/p/90e4b83575e2 XPath 是一门在 XML 文档中查找信息的语言.XPath 用于在 XML 文档中通过元素和属性进行导航. 相比于BeautifulSoup,Xpath在提取数据时会更加的方便. 安装 在Python中很多库都有提供Xpath的功能,但是最基本的还是lxml这个库,效率最高.在之前BeautifulSoup章节中我们也介绍到了lxml是如何安装的. pip ins

网页解析库-Xpath语法

网页解析库 简介 除了正则表达式外,还有其他方便快捷的页面解析工具 如:lxml (xpath语法) bs4 pyquery等 Xpath 全称XML Path Language, 即XML路径语言,是一门在XML文档中查找信息的语言,同样也适用于HTML文档的搜索. 爬虫 我们需要抓取的只是某个网站或者应用的一部分内容 结构化 先有结构 再有数据 转化为字典处理(如:json => dict) 非结构化 html 正则 lxml bs4等去解析 安装: pip install beautifu

Xpath解析xml

Xpath解析xml其实最主要的是查找xml文档中信息,而且不需要了解xml文档结构 package com.huawei.xml; import java.io.InputStream;import java.util.List; import org.jdom2.Document;import org.jdom2.Element;import org.jdom2.input.SAXBuilder;import org.jdom2.xpath.XPathExpression;import or

利用XPath解析带有xmlns的XML文件

在.net中,编写读取xml 的程序中提示"未将对象引用设置到对象的实例",当时一看觉得有点奇怪.为什么在读取xml数据的时候也要实例化一个对象.google了才知道,xml文件中加入了xmlns表示名称空间,但同时Xpath也必须加上. 如之前我们的xml文件定义为: <Project Name="目标计划项目"> <Process Name="个人月度计划" Description="个人月度计划" Ve

介绍requests+threading多线程爬虫,提取采用xpath 和正则两种,介绍线程锁

爬虫专业的都喜欢scrapy框架,但scrapy上手需要时间,对初学者不太适合. 本文介绍使用requets爬虫,为了利于演示学习,使用了xpath解析html和完全使用正则来提取两种方法,仅供参考. import requests,json,random import re,threading from lxml import etree lock=threading.Lock() user_agent_list = [ "Mozilla/5.0 (Windows NT 6.1; WOW64)