zoukankan      html  css  js  c++  java
  • xpath教程 3

    一、xpath提取内容

    1、提取节点中最表层的文本

    htmlobj.xpath("./text()")

    在scrapy中用extract()[0]方法抽取文本。如:

    temp['title'] = node.xpath('./text()').extract()[0].strip()
    temp['title_url'] = node.xpath('./@href').extract()[0]

    python中用到extract一般会是scrapy中获取meta内容。

    2、提取节点中多嵌套的文本

    htmlobj.xpath("string(.)").strip()

    from lxml import etree
    # 获取全部有意义正文文本
    html_str="""<div>hah<a>六六六</a>cccc收拾收拾</div>"""
    html_etree = etree.HTML(html_str)  # 获取element 类型的html
    all_content = html_etree.xpath('string(.)').strip()
    print(all_content)
    

      

    遇到gbk编码问题解决方案:

    print(all_content.encode('gbk', 'ignore').decode('gbk'))

    原文:https://www.jb51.net/article/143722.htm

    输出:

    hah六六六cccc收拾收拾

    3、提取节点中属性的值

    htmlobj.xpath("./@href")

    <div class="item item-btn">
    <input type="hidden" name="type" value="ML" />
    </div> 

    html_str = response.content.decode()
    html_etree = etree.HTML(html_str) # 获取element 类型的html
    all_content = html_etree.xpath("//div[@class='item item-btn']//input[@name='type']/@value")
    print(all_content)
    

      

    输出:

    ['PL', 'ML']

    二、xpath谓语的其他使用

    xpath定位中starts-with、contains和text()的用法

    1、starts-with

    顾名思义,匹配一个属性开始位置的关键字

    //input[starts-with(@name,'name1')] 查找name属性中开始位置包含'name1'关键字的页面元素

    2、contains

    匹配一个属性值中包含的字符串

    //input[contains(@name,'na')] 查找name属性中包含na关键字的页面元素

    3、text()

    匹配的是显示文本信息,此处也可以用来做定位用

    <a href="http://www.baidu.com">百度搜索</a>

    xpath写法为 //a[text()='百度搜索']

    或者 //a[contains(text(),"百度搜索")]

    参考:

    http://blog.csdn.net/zhouxuan623/article/details/43935039

    3、注意
    如果有tbody标签,要省去tbody及之前的路径,写成相对路径

  • 相关阅读:
    Linux下搭建socks5代理
    在vs2005 使用FreeTextBox
    毕业了!!
    ASP.net 2.0上传图片方法
    再网页中,怎么用VS2005中的日历空件输入日期格式!
    毕业设计!!
    学校终于放假了,今天就可以回家了!
    求职!本人是07届刚毕业的学生!求程序员
    libcurl教程(转)
    spring boot集成swagger3
  • 原文地址:https://www.cnblogs.com/andy9468/p/10144867.html
Copyright © 2011-2022 走看看