Xpath入门

一、首先,先了解几个概念:

  XPath,全称 XML Path Language,即 XML 路径语言,它是一门在 XML 文档中查找信息的语言。最初是用来搜寻 XML 文档的,但同样适用于 HTML 文档的搜索。所以在做爬虫时完全可以使用 XPath 做相应的信息抽取。

二、安装lmxl模块:

pip install lxml 

三、xpath解析

<book>
    <id>1</id>
        <name>野花遍地香</name>
        <price>1.23</price>
        <author>
            <nick>周大强</nick>
            <nick>周芷若</nick>
        </author>
</book>


在上述htlm中,
1. book, id, name, price....都被称为节点。
2. Id, name, price, author被称为book的子节点
3. book被称为id, name, price, author的父节点
4. id, name, price,author被称为同胞节点
OK~有了这些基础知识后,我们就可以开始了解xpath的基本语法了
四、用法:
1.将要解析的html内容构造出etree对象。
2.使用etree对象的xpath(方法配合xpath表达式来完成对数据的提取

from lxml import etree
xml ="""
<book>
    <id>1<id>
    <name>野花遍地香</name>
    <price>1.23</price>
    <nick>昊豆腐</nick>
    <author>
        <nick id="100116">周一</nick>
        <nick id="100110”>周二</nick>
        <nick class="joy">周三</nick>
        <nick class="makew">周四</nick>
        <div>
            <nick>hhhhh</nick>
        </div>
        <span>
            <nick>aaaa</nick>
        </span>
    </author>
    <partner>
        <nick id="1111">abc</nick>
        <nick id="2222">abcd</nick>
    </partner>
</book>
"""
tree=etree.XML(xml)
res=tree.xpath("/book")        # /表示层级关系,第一个/表示根节点
res=tree.xpath("/book/name/text()")     # text() 拿文本
res=tree.xpath("/book/author//nick/text()")   #// 表示后代
res=tree.xpath("/book/author/*/nick/text()")     # * 任意节点/通配符
res=tree.xpath("/book//nick/text()")

print(res)

 

那么如果在上述案例中我们只想拿到 ”百度“ 这个信息该怎么办呢

res=tree.xpath("/book/body/ul/li[1]/a/text()")   # [] 表示索引,xpath的顺序从1开始

还有另一种方法比如提取“大炮”这个信息

res=tree.xpath("/book/body/ol/li/a[@href='dapao']/text()")     #[@xxx=xxx] 属性的筛选

 那么我们怎么遍历呢

ol_li_list = tree.xpath("/html/body/ol/li")

for li in ol_li-list:
    # 从每一个li中提取到文字信息
    res=li.xpath("./a/text()")  # 这个查找不是从根节点去找而是在li中继续去寻找,相对查找
                                # ./表示当前结点
    res1=li.path("./a/@href")   # 拿属性值:@xxx
    print(res)
    print(res1)

那么不用遍历怎么拿到全部属性值呢(以ul中的为例)

print(tree.xpath("/html/body/ul/li/a@href"))

 如果遇到复杂的代码这么写就显得有些费力了 showtime

在网页中右键找 查找 然后我们可以看到左上角有个箭头的东东点击这个我们可准确确定到想要的信息 

 在右键

 

 复制之后就是这个状态

print(tree.xpath('/html/body/div[1]/text()')) #注意补齐

 如果把[]这个去掉就和循环遍历一样的效果了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值