python xpath表达式

    科技2022-07-16  117

           xpath适用于html/xml文档的搜索,lxml是一个html/xml的解析器,主要功能是如何解析和提取html/xml数据。通过lxml的etree模块,可以获得特殊的html、获取一类或指定标签的内容、获取标签属性。

    from lxml import etree #字符串里面是html格式的内容 text = ''' <div> <ul> <li class= "item01">这是一个li标签</a></li> <li class= "item02"><a href="https://www.baidu.com/">小张</a></li> <li class= "item04"> <span>小王</span> </li> </ul> </div> ''' #获取特殊的html(从字符串) #HTML()函数 htmlvalue = etree.HTML(text) #返回的是特殊的html结构 result = etree.tostring(htmlvalue,encoding='utf-8').decode() #将特殊的html文档转为字符串格式,打印出来 print(result)

    之所以说是特殊的html文档是因为:如果字符串里面的标签不够完整,会自动补充;其次,中文会转化为二进制字节码。

    #获取一类标签的标签内容(从本地的html文档) #parse()函数 htmlvalue = etree.parse("./demo.html",etree.HTMLParser()) #依然是特殊的html结构 # //div表示所有的div标签 //div//a表示所有div标签下的a标签 # 返回的是一个列表,列表中的元素是对应标签所在的地址 result = htmlvalue.xpath("//div//a") #调用text属性可以获得标签内容 print(result[1].text) #获取指定标签的内容 htmlvalue = etree.parse("./demo.html",etree.HTMLParser()) #[@id='spanid']/[@class='span01']是筛选条件 result = htmlvalue.xpath("//div/span[@id='spanid']") print(result[0].text) #获取标签属性 htmlvalue = etree.parse("./demo.html",etree.HTMLParser()) #获得属性href的值 result = htmlvalue.xpath("//a/@href") #返回的是一个列表,元素就是链接的地址 print(result)

    加载本地html文档,获取一类或指定标签的内容、获取标签属性分为两个步骤:

    1. 加载本地html文档,解析html文档(使用parse()函数获得特殊的html结构)

    2. 通过特殊的html结构,调用xpath()函数获得标签内容和属性

    这里,步骤1中的parse()函数的第一个参数为本地html文档的相对路径,第二个参数是lxml.etree.HTMLParser object;步骤2中,//标签1/标签2指的是:标签1下的标签2。如果想要获取标签内容,需要给出筛选条件,知道是哪些标签的标签内容;如果想要获得标签属性,需要给出标签下的属性。获得标签内容和属性的语法有些许的差别。

    Processed: 0.008, SQL: 8