python xpath入门_Python Xpath基础知识

一、Xpath简介

XPath, 全称 XML Path Language,即 XML 路径语言,它是一门在 XML 文档中查找信息的语言。它最初是用来搜寻 XML 文档的,但是它同样适用于 HTML 文档的搜索。。

XPath 于 1999 年 l l 月 16 日成为 W3C标准,它被设计为供 XSLT、 XPointer 以及其他 XML解析 软件使用,更多的文档可以访问其官方网站: https://www.w3.org/TR/xpath/。

二、Xpath常用规则

表达式

描述

nodename

选取此节点的所有子节点

/

从当前节点选取直接子节点

//

从当前节点选取子孙节点

.

选取当前节点

..

选取当前节点的父节点

@

选取属性

*

所有节点

常用的模块

lxml库的etree模块

常用的方法

tostring():可输出修正后的HTML代码

decode():转换代码类型

三、节点选取例子

3.1 所有节点

from lxml import etree

html = etree.parse('./test.html',etree.HTMLParser())

result = html.xpath('//*')

print(result)

一般会用//开头的Xpath规则来选取所有符号要求的节点。

3.2 子节点

from lxml import etree

html = etree.parse('./test.html',etree.HTMLParser())

result = html.xpath('//li/a')

print(result)

我们通过/或//即可查找元素的子节点或子孙节点。假如现在想选择 li 节点的所有直接 a 子节点, 可以这样实现。

3.3 父节点

from lxml import etree

html = etree.parse('./test.html',etree.HTMLParser())

result = html.xpath('//a@[href="link4.html"]/../@class')

print(result)

比如,现在首先选中 href 属性为 link4.html 的 a 节点,然后再获取其父节点,然后再获取其 class 属性。

3.4 属性匹配

from lxml import etree

html = etree.parse('./test.html',etree.HTMLParser())

result = html.xpath('//li[@class="item-0"]')

print(result)

比如,这里如果要选取 class 为 item-1 的 li 节点。

3.5 文本获取

from lxml import etree

html = etree.parse('./test.html',etree.HTMLParser())

result = html.xpath('//li[@class="item-0"]//text()')

print(result)

用 XPath 中的 text()方法获取节点中的文本。

3.6 属性获取

例如,我们想获取所有 li 节点下所有 a 节点的 href 属性,代码如下:

from lxml import etree

html = etree.parse('./test.html',etree.HTMLParser())

result = html.xpath('//li/a/@href')

print(result)

3.7 属性多值匹配

from lxml import etree

text = '''

first item

'''

html = etree.HTML(text)

result = html.xpath('//li[contains(@class,"li")]/a/text()')

print(result)

3.8 多属性匹配

from lxml import etree

text = '''

first item

'''

html = etree.HTML(text)

result = html.xpath('//li[contains(@class,"li") and @name="item"]/a/text()')

print(result)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值