首页 > 编程语言 > 详细

python-xpath解析基本用法

时间:2020-10-28 15:25:54      阅读:45      评论:0      收藏:0      [点我收藏+]

常用便捷高效

原理:

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

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

环境安装:

--pip install lxml

--如何实例化一个etree对象

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

  etree.parse(filepath)

--2.将从互联网上获取源码数据加载到该对象中

  etree.HTML(‘page_text‘)

--xpath(‘xpath表达式‘)

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

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

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

    -索引定位://div[@class=‘song‘]/p[3] (表示:所有div下class=‘song‘属性下的p标签下第3个标签(索引是从1开始))

    -取文本:

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

      -//text()标签中非直系的文本内容(所有的文本内容)

    -取属性:

                      /@attrName   

#解析本地html文件源码
#根据层级进行定位
from  lxml import etree

#lxml.etree.XMLSyntaxError: StartTag: invalid element name, line 2, column 2
#html代码书写不规范,不符合xml解析器的使用规范
‘‘‘
解决的办法:
使用parse方法的parser参数:
parser = etree.HTMLParser(encoding=“utf-8”)
selector = etree.parse(’./data/lol_1.html’,parser=parser)
result=etree.tostring(selector)
print(result)

‘‘‘

#实例化etree对象

parser=etree.HTMLParser()
tree=etree.parse(‘大学排名.html‘,parser=parser)
r=tree.xpath(‘/html/head/title‘)
print(r)  #[<Element title at 0x1f82e18ec40>]

#/表示从根节点开始定位,一个斜杠表示一个层级,
n=tree.xpath(‘/html/body/div‘)
print(n)  #[<Element div at 0x1e3cc13ebc0>]

#// 两个斜杠表示多个层级
a=tree.xpath(‘/html//div‘)
print(a)
b=tree.xpath(‘//div‘)
print(b) #[<Element div at 0x1f8786cbd80>, <Element div at 0x1f8786cbe00>, <Element div at 0x1f8786cbc40>, <Element div at 0x1f8786cbe40>,...]

#属性模式
#//标签名[@class=‘‘]
c=tree.xpath(‘/html/body//div[@class="header shadow"]‘)
c=tree.xpath(‘//div[@class="header shadow"]‘)
print(c)
#索引定位
#//div[@class=‘‘]/p[3]索引从1开始表示第三个p标签


#获取标签中的文本内容 乱码需要编码解码
#/text();//text()
d=tree.xpath(‘//title/text()‘)
print(d)  #[‘èí??-??μè?ìóy?à??áì?è?·??‘]
print(d[0].encode(‘ISO-8859-1‘).decode(‘gbk‘)) #软科-高等教育评价领先品牌
d=tree.xpath(‘//td/text()‘)


#如需获取标签下的属性中的标签内的text
#tree.xpath(‘/html/body/div[@class=‘header..‘]/p/text()‘)


#for i,s in enumerate(d):
    #print(d[i].encode(‘ISO-8859-1‘).decode(‘gbk‘),end=‘\t‘) #通过for循环打印出td下所有text()的内容


#获取标签中的属性值
e=tree.xpath(‘/html/body/div/@id‘)#取得div下id=属性对应的值
print(e)

  

python-xpath解析基本用法

原文:https://www.cnblogs.com/yescarf/p/13891023.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!