xpath的使用

xpath的基本使用:

Xpath的学习:
    0.参考
        https://www.w3.org/TR/xpath/
        http://www.w3school.com.cn/xpath/index.asp
        https://zhuanlan.zhihu.com/p/29436838
    1.xPath的概念:
        XML Path Language :
        是一门语言,用于搜寻XML文档的,但是,也可以用于HTML文档的搜索
        ,在做爬虫的时候,会有人使用xPAth来做,相应信息的抽取..
    2.xPath的基本语法:
        '/':
            从当前的节点,选取直接子节点
        '//':
            从当前节点选取子孙节点
        '.':
            选取当前的节点
        '..':
            选取当前节点的父节点
            parent:: 也可以实现的...
        '@':
            选取属性
            简单举例说明:
                //title[@lang='eng']
                    标签名为title ,属性 lang的值为 eng
    3.配饰安装环境:
        安装LXML 库
        
        
    4.代码案例:
        Python文件:
            from lxml import etree
            '''
            page = etree.HTML(html.lower().decode('utf-8'))
            etree.parse直接接受一个文档,按照文档结构解析,就不用打开文件了
            HTMLParser是python自带的网页解析工具
            '''
            html = etree.parse('./test.html', etree.HTMLParser())


            #匹配所有的节点
            result=html.xpath('//*')




            #获取所有的li节点,返回的是一个数组(需要做一些处理的)
            result1=html.xpath('//li')
            print(result1)


            #获取子节点
            result2=html.xpath('//li/a')
            print(result2)




            #获取后代节点
            result3 = html.xpath('//ul//a')
            print(result3)


            #通过子节点来获取父节点...
            result4 = html.xpath('//a[@href="https://ask.hellobi.com/link4.html"]/../@class')
            print(result4)


            # 找父元素  为什么要使用  * 呢??  搞不懂
            result5=html.xpath('//a[@href="https://ask.hellobi.com/link4.html"]/parent::*/@class')
            print(result5)


            #匹配属性
            result6=html.xpath('//li[@class="item-0"]')
            print(result6)


            #文本的获取:
            result7=html.xpath('//li[@class="item-0"]/text()')
            print(result7)  #'/'  获取直接的子节点,所以没有内容的


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


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


            #属性的获取
            result10=html.xpath('//li/a/@href')
            print(result10)




            #一个属性的多个值  的匹配,就是有好几个class   我只匹配其中的一个( 用于匹配一个属性有多个值的情况 )
            result11=html.xpath('//li[contains(@class, "li")]/a/text()')
            print(result11)


            #多个属性作为匹配条件
            result12=html.xpath('//li[contains(@class,"li") and @name="item"]/a/text()')
            print(result12)


            # xpath的运算符  http://www.w3school.com.cn/xpath/xpath_operators.asp




            #排序选择
            result13 = html.xpath('//li[1]/a/text()')  #选择器竟然不是从0 开始计数的
            print(result13)
            result14 = html.xpath('//li[last()]/a/text()')  #获取最后一个元素
            print(result14)
            result15 = html.xpath('//li[position()<3]/a/text()')  #获取di 1,2个元素
            print(result15)
            result16 = html.xpath('//li[last()-2]/a/text()')  #last()  最后一个  last()-2  就是倒数第三个元素了...
            print(result16)




            #节点轴的选择
            # 获取所有的祖先
            result17=html.xpath('//li[1]/ancestor::*')
            print(result17)
            #获取div 祖先
            result18=html.xpath('//li[1]/ancestor::div')
            print(result18)
            #获取所有的属性
            result19=html.xpath('//li[1]/attribute::*')
            print(result19)


            #获取直接子节点,并且限制了属性
            result20=html.xpath('//li[1]/child::a[@href="https://ask.hellobi.com/link1.html"]')
            print(result20)


            #获取  所有后代节点  中的span
            result21=html.xpath('//li[1]/descendant::span')
            print(result21)


            #获取当前节点之后的所有节点( 不管是不是同级的,都会被选中的 )
            result22=html.xpath('//li[1]/following::*[2]') #获取第二个后续节点
            print(result22)


            result24=html.xpath('//li[1]/following::*/span/text()')
            print(result24)


            #获取兄弟节点   之后的
            result23=html.xpath('//li[1]/following-sibling::*')
            print(result23)
            
        html文件:
            <!DOCTYPE html>
            <html lang="en">
            <head>
              <meta charset="UTF-8">
              <title>Title</title>
            </head>
            <body>
             <div>
                <ul>
                     <li class="item-0"><a href="https://ask.hellobi.com/link1.html">first item <span>span content</span></a></li>
                     <li name="item" class="item-1 li"><a href="https://ask.hellobi.com/link2.html">second item</a></li>
                     <li class="item-inactive"><a href="https://ask.hellobi.com/link3.html">third item</a></li>
                     <li class="item-1"><a href="https://ask.hellobi.com/link4.html">fourth item</a></li>
                     <li class="item-0"><a href="https://ask.hellobi.com/link5.html">fifth item <span>为   貌</span></a>
                 </ul>
             </div>


            </body>
            </html>
        
        
    5.谷歌浏览器  xPath helper的使用:
        1.ctrl+shift+x 
            shift + 左键选中对应的块
        2.f12 开发者工具中
            右击,copy   copy xpath 
        3.有利有弊
            都是从根目录开始,比较冗长...
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值