python之Xpath语法


当前第2页 返回上一页

XML 素材:http://www.cnblogs.com/zhangboblogs/p/10114698.htm
除了直接读取字符串,lxml 还支持从文件里读取内容。我们新建一个 hello.html 文件,再利用 etree.parse()方法来读取文件。
注意:从文件中读取数据,要求文件内容符合 xml 格式,如果标签缺失,则不能正常读取。

四、XPath 节点信息解析:

# 安装lxml: pip install lxml

 

# 1. 导入etree: 两种导入方式

# 第一种: 直接导入

from lxml import etree

# 注意: 此种导入方式,可能会导致报错(etree下面会出现红色波浪线,不影响正常使用)

 

# 第二种:

# from lxml import html

# etree = html.etree

 

str ='<bookstore>'\

            '<book>'\

                '<title src="https://www.baidu.com">Harry Potter</title>'\

                '<price>29.99</price>'\

            '</book>'\

            '<book>'\

                '<title>Learning XML</title>'\

                '<price>39.95</price>'\

            '</book>'\

            '<book>'\

                '<title>西游记</title>'\

                '<price>69.95</price>'\

            '</book>'\

            '<book>'\

                '<title src="https://www.jd.com">水浒传</title>'\

                '<price>29.95</price>'\

            '</book>'\

            '<book>'\

                '<title src="https://www.jd.com">三国演义</title>'\

                '<price>29.95</price>'\

            '</book>'\

        '</bookstore>'

 

 

# 2. etree.HTML() 将字符串转换成HTML元素对象,可以自动添加缺失的元素

html = etree.HTML(str)  # <Element html at 0x1e17b839708>  是一个el对象

#print(html)

 

 

# 3. 方法:

# 3.1 tostring()  查看转换之后的内容(二进制类型)

# 如果想要查看字符串,需要解码

# 如果想要显示汉字,需要先编码,再解码

# content = etree.tostring(html,encoding='utf-8')

#print(content.decode())

 

 

# 3.2 xpath()方法  作用:提取页面数据,返回值是一个列表

# xpath的使用一定是建立在etree.HTML()之后的内容中的

 

# xpath是如何来提取页面数据的?

# 答:使用的是路径表达式

 

# 3.2.1 xpath路径分为两种:

# 第一种: /  代表一层层的查找,如果/存在于开头,代表根路径

# bookstore = html.xpath('/html/body/bookstore')

#print(bookstore)  # [<Element bookstore at 0x2dd535efb88>]

 

# 第二种:// 任意路径  焦点在元素身上

# 例如:查找bookstore标签

# bookstore = html.xpath('//bookstore')

#print(bookstore)  # [<Element bookstore at 0x1639054fdc8>]

 

# 第一种和第二种结合

# 例如:查找所有book标签

# book = html.xpath('//bookstore/book')

#print(book)  # [<Element book at 0x2737fd7fa48>, <Element book at 0x2737fd7fc88>, <Element book at 0x2737fd7fcc8>, <Element book at 0x2737fd7fd08>, <Element book at 0x2737fd7fd88>]

 

# 3.2.2 /text()  获取标签之间的内容

# 例如:获取所有title标签的内容

# 步骤:

# 1. 找到所有title标签

# 2. 获取内容

# title = html.xpath('//book/title/text()')

#print(title)  # ['Harry Potter','Learning XML','西游记','水浒传','三国演义']

 

# 3.3 位于  使用[]  可以理解成条件

# 3.3.1 [n] 代表获取第n个元素,n是数字,n<=1

# 例如: 获取第二个title标签

# title = html.xpath('//book[2]/title/text()')

# title1 = html.xpath('//title[2]/text()')

#print(title)  # ['Learning XML']

#print(title1)  # []

 

# last()  获取最后一个

# 同理: last()-1  获取倒数第二个

# 例如: 获取最后一本书的title标签之间的内容

# title = html.xpath('//book[last()]/title/text()')

# title1 = html.xpath('//book[last()-1]/title/text()')

#print(title)  # ['三国演义']

#print(title1)  # ['水浒传']

 

# 3.3.2 position()  位置,范围  支持 > / < / = / >= / <= / !=

# 例如: 获取最后两本书的title标签之间的内容

# 步骤:

# 1. 先获取后两本书

# 2. 获取内容

# title = html.xpath('//book[position()>3]/title/text()')

#print(title)  # ['水浒传','三国演义']

# ? title = html.xpath('//book[position()>last()-2]/title/text()')

#print(title)  # ['水浒传','三国演义']

 

# 3.3.3 获取属性值:@属性名

 

# 例如: 获取lang属性值为cng的title标签的内容

# title = html.xpath('//book/title[@lang="cng"]/text()')

#print(title)  # ['西游记']

 

# 例如: 获取包含src属性得title标签的内容

# title = html.xpath('//book/title[@src]/text()')

#print(title)  # ['Harry Potter','水浒传','三国演义']

 

# 例如: 获取包含属性的title标签的内容

# title = html.xpath('//book/title[@*]/text()')

#print(title)  # ['Harry Potter','Learning XML','西游记','水浒传','三国演义']

 

# 例如: 获取最后一个title标签的src属性的值

# title = html.xpath('//book[last()]/title/@src')

#print(title)  # ['https://www.jd.com']

 

返回前面的内容

相关阅读 >>

Python中的map怎么使用

Python中你必须了解的知识

Python初学者必须理解的10个知识点

mac系统可以学Python

microPython选哪个好?

Python使用正则表达式实现搜索单词的示例代码

Python属于什么类型的语言

geany中怎么配置Python

只学Python能找工作吗

Python基本数据类型有哪些

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...