python3学习-lxml模块

在爬虫的学习中,我们爬取网页信息之后就是对信息项匹配,这个时候一般是使用正则。但是在使用中发现正则写的不好的时候不能精确匹配(这其实是自己的问题!)所以就找啊找。想到了可以通过标签来进行精确匹配岂不是比正则要快。所以找到了lxml。

因为lxml是对xml格式的解析,支持html格式,而对于xml格式的解析有一门专用的语言,XPath。XPath用于在xml文档中通过元素和属性进行导航。lxml库也是解析xml文件,所以也应用了XPath语法。我们先学习一下XPath 的标准语法,然后将这些语法知识应用到lxml之中。

大家应该对xml或者是html都不陌生,默认大家都知道,所以就简单介绍。

节点关系

父子节点(Parent children)

<div class="all">
    <div class="sub"></div>
</div>

无需解释。

兄弟节点(sibling)

<div class="all">
    <div class="sibling"></div>
    <div class="sibling"></div>
</div>

无需解释。

先辈(Ancestor)后代(Descendant)

<div class="grandpa">
    <div class="all">
        <div class="sibling"></div>
        <div class="sibling"></div>
    </div>
</div>

节点选择

表达式描述
nodename选取此节点的所有子节点
/此路径运算符出现在模式开头时,表示应从根节点选择
//从当前节点开始递归下降,此路径运算符出现在模式开头时,表示应从根节点递归下降。
.选取当前节点
..选取当前节点的父节点
@选取属性
*通配符.选择所有元素节点与元素名无关
@选取属性
@*选取所有属性
:命名空间分隔符;将命名空间前缀与元素名或属性名分隔
()括号运算符(优先级最高),强制运算优先级
[]应用筛选模式(即谓词,包括”过滤表达式”和”轴(向前/向后)”)
|两个节点集合的联合,eg:/div/a | //div/span
@选取属性

匹配未知节点

通配符描述
*匹配任何节点
@*匹配任何属性节点
node()匹配任何类型的节点

实例

下面我们通过一些例子看一下谓词+表达式的综合:

路径表达式结果
/node()根元素下所有的节点(包括文本节点,注释节点等)
/text()查找文档根节点下的所有文本节点
/div/a[1]选取属于div的第一个a元素
/div/a[1]选取属于div的第一个a元素
/div/a[last()]选取属于div的子元素中倒数第一个a元素
/div/a[last()-1]选取属于div的子元素中倒数第二个a元素
/div/a[position()
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值