数据解析_xpath

Posted sunflying

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据解析_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>]

以上是关于数据解析_xpath的主要内容,如果未能解决你的问题,请参考以下文章

Python_爬虫_数据解析回顾

Android 逆向使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )(代码片段

xpath解析基础

Python爬虫:数据解析 之 xpath

13_Python_解析库_Xpath的使用

Python Xpath的解析,应用