当前位置: 首页>后端>正文

python如何在xpath中添加变量 python xpath

python爬虫采集领域,会需要学习到正则表达式和Xpath表达式。这一篇笔记简单介绍一下Xpath相关的内容。

Xpath的概念

Xpath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。起初XPath的提出的初衷是将其作为一个通用的、介于Xpointer与XSL间的语法模型。但是XPath很快地被开发者采用来当作小型查询语言。

XPath的选择功能十分强大,它提供了非常简明的路径选择表达式,另外,它还提供了超过100个内建函数,用于字符串、数值、时间的匹配以及节点、序列的处理等,几乎所有我们想要定位的节点,都可以用XPath来选择。

Xpath的解析原理是:

1.实现标签的定位:实例化一个etree的对象,且需要将被解析的页面源码数据加载到该对象中。

2.调用etree对象中的xpath方法结合着xpath表达式实现标签的定位和内容的捕获。

怎样才能在Python使用Xpath

安装好之后需要实例化一个etree对象,可以把你需要的源码数据加载到这里面

etree. parse(filepath)#文件路径

例如:

etree.parse('D:\111.txt')#实例化一个etree对象

Xpath表达式

选取节点 XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。

下面列出了最有用的路径表达式:



表达式

描述

nodename

选取此节点的所有子节点。

/

从根节点选取。

//

从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。

.

选取当前节点。

..

选取当前节点的父节点。

@

选取属性。



在下面的表格中列出了一些路径表达式以及表达式的结果:



路径表达式

结果

bookstore

选取 bookstore 元素的所有子节点。

/bookstore

选取根元素 bookstore。

注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!

bookstore/book

选取属于 bookstore 的子元素的所有 book 元素。

//book

选取所有 book 子元素,而不管它们在文档中的位置。

bookstore//book

选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。

//@lang

选取名为 lang 的所有属性。



一个示例

假设有一个这样的HTML文档

<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>test</title>
</head>
<body>
    <div>
        <p>喵喵</p>
    </div>
    <div class="cute">
        <p>天使猫猫</p>
        <p>巧克力猫</p>
        <p>草莓猫猫</p>
        <p>彩虹猫猫</p>
        <a href="http://www.cute.com/" title="奇迹猫猫" target="_self">
        我太可爱了,怎么办呢</a>
        <a href="" class="cool">咖啡魔力猫</a>
    </div>
    <div class="ero">
        <ul>
            <li><a href="http://www.baidu.com" title="1">OUO</a></li>
            <li><a href="http://www.4399.com" title="2">PWP</a></li>
            <li><a href="http://www.7k7k.com" alt="3">QAQ</a></li>
            <li><a href="http://www.4399h.com" class="4">喵呜</a></li>
            <li><b>cute</b></li>
            <li><i>cool</i></li>
            <li><a href="http://www.hentaiba.com" id="6">喵喵</a></li>
        </ul>
    </div>
</body>
</html>




python如何在xpath中添加变量 python xpath,python如何在xpath中添加变量 python xpath_python,第1张


假设需要寻找的是:

<div>
<p>喵喵</p>
</div>
<div class="cute">
<p>天使猫猫</p>
<p>巧克力猫</p>
<p>草莓猫猫</p>
<p>彩虹猫猫</p>
<a href="http://www.cute.com/" title="奇迹猫猫" target="_self">
我太可爱了,怎么办呢</a>
<a href="" class="cool">咖啡魔力猫</a>
</div>
以及
<div class="ero">
<ul>
<li><a href="http://www.baidu.com" title="1">OUO</a></li>
<li><a href="http://www.4399.com" title="2">PWP</a></li>
<li><a href="http://www.7k7k.com" alt="3">QAQ</a></li>
<li><a href="http://www.4399h.com" class="4">喵呜</a></li>
<li><b>cute</b></li>
<li><i>cool</i></li>
<li><a href="http://www.hentaiba.com" id="6">喵喵</a></li>
</ul>
</div>

以上三个该html文档所包含的全部div节点,

那么就有以下三种方法可以实现:

  1. 从上往下顺序查找
  2. 跳跃了一个节点来找到这个div节点的对象
  3. 跳跃上面所有节点寻找
#Xpath
etree.parse('D:\111.html')#实例化一个etree对象
#查找一个节点
tree=etree.parse('D:\111.html')
r1=tree.xpath('/html/body/div')
r2=tree.xpath('/html//div')
r3=tree.xpath('//div')
print(r1,r2,r3)

结果如下:

[<Element div at 0x3925128>, <Element div at 0x3925108>, <Element div at 0x3925088>] [<Element div at 0x3925128>, <Element div at 0x3925108>, <Element div at 0x3925088>] [<Element div at 0x3925128>, <Element div at 0x3925108>, <Element div at 0x3925088>]

当想要获取标签时,就要进行属性定位。

例如想要获取的是div中cute的标签<div class="cute">,那么类似地,可以这样进行:

r4=tree.xpath('//div[@class="cute"]')
print(r4)

返回某一类下的单独的标签,例如天使猫猫,则需要进行索引定位,可以这样:

r4=tree.xpath('//div[@class="cute"]/p[1]')
print(r4)

想要返回整个/p的列表的话,只需要:

r4=tree.xpath('//div[@class="cute"]/p')
print(r4)

需要注意的是,这里的顺序是从1开始,而不是从0开始。

以上返回的结果均是element,如果需要获取文本,就需要进行element到text()的转换:

r5=tree.xpath('//div[@class="ero"]/li[5]/b/text()')
print(r5)
['cute']#返回结果

这样可以直接返回字符串:

r5=tree.xpath('//div[@class="ero"]/li[5]/b/text()')[0]
print(r5)

直接返回标签li下所有文本,则只需要定位到//li并转换成text()即可。

获取属性的话直接用@属性名就好啦


https://www.xamrdz.com/backend/3vu1926471.html

相关文章: