读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代码中如果过有双引号则外面要用单引号;内部是单引号,则外部用双引号。
努力拼搏吧,不要害怕,不要去规划,不要迷茫。但你一定要在路上一直的走下去,尽管可能停滞不前,但也要走。