zoukankan      html  css  js  c++  java
  • 数据解析_xpath

    重点推荐这种解析方式,xpath是最常用且最便捷高效的一种解析方式,通用性

    1、解析原理

          1、实例化一个etree的对象,且需要将被解析的页面源码数据加载到改对象中。

          2、调用etree对象中的xpath方法结合表达式实现标签的定位和内容的捕获

    2、环境的安装

          1、pip install lxml  (lxml是一种解析器)

    3、如何实例化一个etree对象    from lxml import etree

         1、将本地的html文档中的源码数据加载到etree对象中

                etree.parse(filePath)

         2、可以将从互联网上获取的源码数据加载到该对象中

                etree.HTML('page_text')

    4、xpath('xpath表达式')

      -- /:表示的是从根节点开始定位,表示的是一个层级

           -- //:表示的是多个层级,可以表示从任意位置开始定位

           -- 属性定位://div[@class='sort']     tag[@attrName='attrValue']

      --索引定位://div[@class='sort']/p[3]  索引从1开始的

           -- 取文本        /text()  获取的是标签中直系的文本内容

            //text()  获取的是所有后代的文本内容

           -- 取属性    /@attrName   /src

        一个错误:

    lxml.etree.XMLSyntaxError: Opening and ending tag mismatch: meta line 3 and head, line 3, column 87
    
    解决办法:
    自己创建html解析器,增加parser参数
    
    from lxml import etree
    parser = etree.HTMLParser(encoding="utf-8")
    htmlelement = etree.parse("baidu.html", parser=parser)
    print(etree.tostring(htmlelement, encoding="utf-8").decode("utf-8"))
    原文链接:https://blog.csdn.net/Kwoky/java/article/details/81099697
    import  requests
    from lxml import etree
    if __name__ == '__main__':
        parser = etree.HTMLParser(encoding="utf-8")
        #实例化好了一个etree对象,且将被解析的源码加载到该对象中
        tree = etree.parse('test2.html',parser=parser)
        #r = tree.xpath('/html/head/title') #[<Element title at 0x27230787248>]
        #r = tree.xpath('/html//title') #[<Element title at 0x222b0a57408>]
        #r= tree.xpath('//li[@class="sort"]') #[<Element title at 0x25dd0f77048>]
        #r = tree.xpath('//li[@class="sort"]/p[2]')  # [<Element title at 0x25dd0f77048>]
        r = tree.xpath('//li[@class="sort"]//a/text()')
        print(r)  #[<Element li at 0x135d9b37448>]
  • 相关阅读:
    c++小游戏——2048
    c++小游戏——贪吃蛇
    218 事件处理 on() 绑定事件
    217 jQuery 元素操作:遍历,创建,添加(append、prepend、after、before),删除(remove、empty、html)
    216 jQuery 文本属性值:html() 、text() 、 val()
    215 jQuery 属性操作:prop() 、 attr() 、 data()
    214 jQuery案例:王者荣耀手风琴效果
    213 jQuery 事件切换:hover()
    212 停止动画排队: stop()
    211 jQuery 自定义动画:animate()
  • 原文地址:https://www.cnblogs.com/sunflying/p/13193315.html
Copyright © 2011-2022 走看看