zoukankan      html  css  js  c++  java
  • xpath使用

    之前已经对爬虫基本知识点用一篇博客总结过来,因为xpath实在太重要了,单独放一篇

    """
    xpath使用   参考:https://www.w3school.com.cn/xpath/index.asp
    """
    from lxml import etree
    
    text = '''
    <div>
        <ul>
             <li class="item-0"><a href="link1.html">first item</a></li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-inactive"><a href="link3.html">third item</a></li>
             <li class="item-1"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a>
         </ul>
     </div>
    
    '''
    
    html = etree.HTML(text)
    result = etree.tostring(html)
    print(result.decode('utf-8'))
    
    """
    父节点
    """
    print(html.xpath('//a[@href="link4.html"]/../@class'))  # ['item-1']
    print(html.xpath('//a[@href="link4.html"]/parent::*/@class'))  # ['item-1']  父节点后的所有
    
    """
    属性匹配
    """
    print(html.xpath('//li[@class="item-0"]'))  # [<Element li at 0x7fc245c3eec0>, <Element li at 0x7fc245c3ee80>]
    
    """
    文本获取
    """
    print(html.xpath('//li[@class="item-0"]/text()'))  # ['
         ']
    print(html.xpath('//li[@class="item-0"]/a/text()'))  # ['first item', 'fifth item']
    print(html.xpath('//li[@class="item-0"]//text()'))  # ['first item', 'fifth item', '
         ']
    
    """
    属性获取
    """
    print(html.xpath('//li/a/@href'))  # ['link1.html', 'link2.html', 'link3.html', 'link4.html', 'link5.html']
    
    """
    属性多值匹配
    """
    text2 = '''
        <li class="li li-first" name="item"><a href="link1.html">first item</a></li>
    '''
    html2 = etree.HTML(text2)
    print(html2.xpath('//li[@class="li"]/a/text()'))  # []
    # 使用contains()方法,第一个参数传入属性名称,第二个参数传入属性值
    print(html2.xpath('//li[contains(@class, "li")]/a/text()'))  # ['first item']
    
    """
    多属性匹配
    or  或     age=19 or age=20
    and 与        age>19 and age<25
    mod  计算除法的余数   5 mod 2
    |   计算两个节点集    //book | //cd
    +    加法
    -    减法
    *    乘法
    div  除法
    =    等于       age=12
    !=   不等于
    <   小于
    <=   
    >
    >=   
    """
    print(html2.xpath('//li[contains(@class, "li") and @name="item"]/a/text()'))  # ['first item']
    
    """
    按序选择
    """
    print(html.xpath('//li[1]/a/text()'))  # ['first item']  选择第一个li节点(从1开始)
    print(html.xpath('//li[last()]/a/text()'))  # ['fifth item']
    print(html.xpath('//li[position()<3]/a/text()'))   # ['first item', 'second item']  # 位置小于3
    print(html.xpath('//li[last()-2]/a/text()'))   # ['third item']  倒数第3个
    
    """
    节点轴选择
    """
    

    时间太紧,不像努力了?

    浏览器Elements的搜索是支持Xpath的

    可以使用浏览器复制出Xpath(公式很长,需要修改)

    借助浏览器插件?
    自行百度

  • 相关阅读:
    [转]Win7 64位操作系统下配置PHP+MySql+Apache环境
    [转]你必须懂的 T4 模板:深入浅出
    [转]C#反射机制介绍
    [转]RDLC报表,纯文字内容,动态数据源 解决方案
    [转]关于C# 中的Attribute 特性
    [转]MVC中如何使用RDLC报表
    [转]关于用netbeans和xdebug调试php的配置
    1308论文相关时间
    [转].net 使用NPOI或MyXls把DataTable导出到Excel
    [转]MySQL安装总结:Start service没有响应(Win7 64位) 服务启动失败 1067 错误
  • 原文地址:https://www.cnblogs.com/fly-book/p/15083442.html
Copyright © 2011-2022 走看看