zoukankan      html  css  js  c++  java
  • Xpath选择器

    Xpath基础使用方法

    '''谷歌浏览器右键html标签可以直接拷贝css选择器和xpath选择器'''
    # s-top-left > a:nth-child(4)
    # //*[@id="s-top-left"]/a[4]
    
    # 基本语法
    # 模拟爬取过来的html页面数据
    doc='''
    <html>
     <head>
      <base href='http://example.com/' />
      <title>Example website</title>
     </head>
     <body>
      <div id='images'>
       <a href='image1.html' a="xxx">Name: My image 1 <br /><img src='image1_thumb.jpg' /></a>
       <a href='image2.html'>Name: My image 2 <br /><img src='image2_thumb.jpg' /></a>
       <a href='image3.html'>Name: My image 3 <br /><img src='image3_thumb.jpg' /></a>
       <a href='image4.html' class='li'>Name: My image 4 <br /><img src='image4_thumb.jpg' /></a>
       <a href='image5.html' class='li li-item' name='items'>Name: My image 5 <br /><img src='image5_thumb.jpg' /></a>
       <a href='image6.html' name='items'><span><h5>test</h5></span>Name: My image 6 <br /><img src='image6_thumb.jpg' /></a>
      </div>
     </body>
    </html>
    '''
    from lxml import etree
    # from bs4 import BeautifulSoup
    html=etree.HTML(doc)  # 类似于bs4
    # soup = BeautifulSoup(doc,'lxml')
    # html=etree.parse('search.html',etree.HTMLParser())
    # 1 所有节点
    # a=html.xpath('//*')  # 匹配所有标签
    # # 2 指定节点(结果为列表)
    # a=html.xpath('//head')  # 标签选择器
    # # 3 子节点,子孙节点
    # a=html.xpath('//div/a')  # 儿子选择器
    # a=html.xpath('//body//a')  # 后代选择器
    # # 4 父节点
    # a=html.xpath('//body//a[@href="image1.html"]')
    # a=html.xpath('//body//a[@href="image1.html"]/..')  # 查看父标签
    # a=html.xpath('//body//a[1]')  # 查找body后代里面的第一个a标签(在xpath中起始位置就是从1开始)
    
    # # 5 属性匹配  css里面的属性选择器
    # a=html.xpath('//body//a[@href="image1.html"]')
    #
    # # 6 文本获取
    # a=html.xpath('//body//a[@href="image1.html"]/text()')
    # a=html.xpath('//body//a/text()')
    #
    # # 7 属性获取
    # a=html.xpath('//body//a/@href')
    # # # 注意从1 开始取(不是从0)
    # a=html.xpath('//body//a[2]/@href')
    # # 8 属性多值匹配
    # #  a 标签有多个class类,直接匹配就不可以了,需要用contains
    # a=html.xpath('//body//a[@class="li"]')  # 精确查找
    # a=html.xpath('//body//a[contains(@class,"li")]/text()')
    # # 9 多属性匹配
    # a=html.xpath('//body//a[contains(@class,"li") or @name="items"]')
    # a=html.xpath('//body//a[contains(@class,"li") and @name="items"]/text()')
    # a=html.xpath('//body//a[contains(@class,"li")]/text()')
    # # 10 按序选择
    # a=html.xpath('//a[2]/text()')
    # a=html.xpath('//a[2]/@href')
    # # 取最后一个
    # a=html.xpath('//a[last()]/@href')
    # # 位置小于3的      类似于切片取值
    # a=html.xpath('//a[position()<3]/@href')
    # # 倒数第二个
    # a=html.xpath('//a[last()-2]/@href')
    # attribute:属性值
    # a=html.xpath('//a[1]/attribute::*')

    '''了解'''
    # # 11 节点轴选择
    # # ancestor:祖先节点
    # # 使用了* 获取所有祖先节点
    # a=html.xpath('//a/ancestor::*')
    # # # 获取祖先节点中的div
    # a=html.xpath('//a/ancestor::div')
    # # attribute:属性值
    # a=html.xpath('//a[1]/attribute::*')
    # # child:直接子节点
    # a=html.xpath('//a[1]/child::*')
    # # descendant:所有子孙节点
    # a=html.xpath('//a[6]/descendant::*')
    # # following:当前节点之后所有节点
    # a=html.xpath('//a[1]/following::*')
    # a=html.xpath('//a[1]/following::*[1]/@href')
    # # following-sibling:当前节点之后同级节点
    # a=html.xpath('//a[1]/following-sibling::*')
    # a=html.xpath('//a[1]/following-sibling::a')
    # a=html.xpath('//a[1]/following-sibling::*[2]/text()')
    # a=html.xpath('//a[1]/following-sibling::*[2]/@href')
    print(a)

  • 相关阅读:
    Linkerd 2.10(Step by Step)—将 GitOps 与 Linkerd 和 Argo CD 结合使用
    Linkerd 2.10(Step by Step)—多集群通信
    Linkerd 2.10(Step by Step)—使用 Kustomize 自定义 Linkerd 的配置
    Linkerd 2.10(Step by Step)—控制平面调试端点
    Linkerd 2.10(Step by Step)—配置超时
    Linkerd 2.10(Step by Step)—配置重试
    Linkerd 2.10(Step by Step)—配置代理并发
    本地正常运行,线上环境诡异异常原因集合
    Need to invoke method 'xxx' declared on target class 'yyy', but not found in any interface(s) of the exposed proxy type
    alpine 安装常用命令
  • 原文地址:https://www.cnblogs.com/yangmeichong/p/14275834.html
Copyright © 2011-2022 走看看