• 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及之前的路径,写成相对路径

  • 相关阅读:
    学无止境,我爱python
    Flask目录
    Django目录
    前端目录
    python目录
    MySQL目录
    Oracle与Sql server的区别
    Git
    restful规范
    Django 解决跨域问题(写入到中间件中)
  • 原文地址:https://www.cnblogs.com/andy9468/p/10144867.html
Copyright © 2020-2023  润新知