读XPath笔记

原文连接
Xpath全称是XML Path language,xml路径语言

lxml装在HTML代码的两种方式

1.从文件装载,使用parse函数
etree.parse
2.从HTML代码装载,使用HTML函数
etree.HTML()

选取所有节点

//*表示选取所有节点
//表示选取符合要求的所有节点

选取子节点

/是选取直接子节点
如://li/a选取所有li标签下的a节点(只要他是存在li标签下都可以选择)

选取父节点

parent::*
前提是他们都知道子节点
如,下面的是描述提取所有代有某个连接的a节点的父节点的class属性

result = html.xpath('//a[@href="https://www.jd.com"]/../@class')
result = html.xpath('//a[@href="https://www.jd.com"]/parent::*/@class')

属性匹配与获取

属性匹配把属性放在中括号中[]

nodes = html.xpath('//a[@href="https://geekori.com"]')

属性获取
直接@属性值的名称(常用的有@herf,@class)

urls = html.xpath('//a[contains(@href,"www")]/@href')

多属性匹配

使用and,or关键字个contains函数

aList = html.xpath('//a[@href="https://www.jd.com" or @href="https://geekori.com"]')
aList = html.xpath('//a[contains(@href,"www") and ../@value="1234"]')

按序选择节点

类似于使用列表索引的方式
但XPath中的索引是从1开始的
还可以使用python的内置函数
position()代表当前位置(一般开始为1),last()表示最后一个索引

XPath返回提取的文本

使用text()

节点轴选择

获取祖先节点,兄弟节点,子孙节点。
ancestor轴
attribute轴
child轴
descendant轴
following轴
following-sibling轴

# ancestor轴,用于获取所有的祖先节点,后面必须跟两个冒号(::),然后是节点选择器
# 这里的*表示匹配所有的节点
result = html.xpath('//li[1]/ancestor::*')
# 使用attribute轴获取第4个<li>节点的所有属性值
result = html.xpath('//li[4]/attribute::*')
# child轴获取第三个<li>节点的所有子节点
result = html.xpath('//li[3]/child::*')
# descendant轴获取第二个<li>节点的所有名为value的子孙节点
result = html.xpath('//li[2]/descendant::value')
# following轴获取第一个<li>节点后的所有子节点(包括子孙节点)
result = html.xpath('//li[1]/following::*')

使用Chrome验证

$x('xpath语法')
这里注意:XPath代码中如果过有双引号则外面要用单引号;内部是单引号,则外部用双引号。

posted @ 2021-10-04 18:58  索匣  阅读(29)  评论(0编辑  收藏  举报