java xml 默认名称空间 xpath_解析XML文件

本文作者:张   宇

文字编辑:余术玲

技术总编:张   邯 

重磅!!!爬虫俱乐部将于 2019年10月2日至10月5日在湖北武汉举行 Python编程技术培训,本次培训采用理论与案例相结合的方式,旨在帮助零基础学员轻松入门Python,由浅入深学习和掌握Python编程技术,尤其是爬虫技 术和文本分析技术。 该培训目前在火热招生中,点击《爬虫俱乐部2019十一Python编程技术培训报名啦!》或点击文末阅读原文,了解培训详细信息,抓紧时间报名吧! XML是由万维网联盟(W3C)创建的标记语言,被设计用来传输和存储数据,XML可以自行定义标签,具有自我描述性,其设计宗旨是传输数据,而非显示数据。 Python自带XML模块,方便开发者解析XML数据。XML模块中包含了广泛使用的API接口--------SAX和DOM等。另外,lxml解析库同样支持HTML和XML的解析,而且支持 XPath 解析方式。总的来说,Python解析XML的常用方法有以下几种: 1、DOM解析,xml.dom.*模块。 2、SAX解析,xml.sax.*模块。 3、ET解析,xml.etree.ElementTree模块。 4、lxml解析并结合XPath提取元素。 由于第四种方法是我们在网络爬虫时解析html经常用到的,也是我们较为熟悉的,所以首先尝试用它来解析xml,另外三种方法也将陆续介绍。 一、生成XML文件 我们使用sublime编辑器编辑一个名为test的xml文件,将其存储在D盘。具体文件内容如下图所示:

a9b392f93e955bad0576adf09dabbab2.png

可以看到,XML文件中存储的是爬虫俱乐部近期将要举办的stata培训的信息。但是,XML仅仅在存储数据的时候非常方便,其在展示数据的时候则显得捉襟见肘。下面,我们将简单介绍 XPath 语法,并结合lxml将XML文件中的信息数据解析出来。

二、XPath语法简单介绍

XPath是一门在XML文档中查找信息的语言,Xpath通过路径表达式在XML文档中进行导航。在XPath中,有七种类型的节点: 元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点 ,以下作简单介绍。

XML元素使用XML标签进行定义,标签就是、、

。元素则包括开始标签、结束标签以及里面的内容,如”students”就是元素。页面中的所有内容都是节点,在上面的例子中,“”是文档(根)节点;“ price="物超所值!!!" ”则为属性(节点);“中国武汉”则是文本(节点)。同时,“中国 武汉”和“students”同为的子孙元素,而“中国 武汉”则是“”的直接子元素。 上述为XPath的一些基础概念,而XPath的常用语法如下(下面用到的div和body都是标签名): 1、/div:在根节点下边查找直接子元素。 2、//div:在根节点下边查找子孙元素。 3、//div//body:获取所有div标签里所有的body标签。 4、//div[@price]:获取含有price属性的div标签。 5、//div[@price = 10]:获取prices属性等于10的div标签。 6、//div/@price:获取div标签的属性。 7、//div/text():获取div标签的文本。 关于XPath的专门介绍请关注爬虫俱乐部后续推文。 三、提取XML文件中的信息 1、导入相关标准库
from lxml import etree
2、定义解析器
parser = etree.XMLParser(encoding = "utf-8")
3、使用解析器parser解析XML文件
#传入两个参数,第一个参数是文件名,第二个参数是解析器。tree = etree.parse(r"D:/test.xml",parser = parser)#查看解析出的tree的内容print(etree.tostring(tree,encoding = 'utf-8').decode('utf-8'))
结果如下:

0e658d99f14a3e9d7db171e9be2ebe57.png

可以发现,我们成功将XML文件的全部内容解析出来。 4 、结合xpath提取XML文件中的信息 (1)此次培训是python培训还是stata培训?
name = tree.xpath("//heading/text()")[0]  #由于xpath语法返回的是列表,因此要用切片将信息提取出来,下同。print(name)
结果如下:

715a0b22b63f79de6c68982272d06791.png

(2)此次培训的时间?
time = tree.xpath("//body/time/text()")[0] print(time)
结果如下:

0c171edc81aff267d5b34368526d417c.png

(3)此次培训的地点?
location = tree.xpath("//location/text()")[0]print(location)
结果如下:

e05d6f71ed6747eec6a2e56297579379.png

(4)此次培训的价格?
price = tree.xpath("//body/@price")[0]print(price)
结果如下:

487ef4e8a6b06034699edd8d037b4d72.png

以上就是我们结合xpath和lxml解析XML的过程,此方法同样适用于网络爬虫中解析html,希望对大家有所帮助。

2a9639e65c4024430f123e6f1253a4a4.gif

对爬虫俱乐部的推文累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫!

往期推文推荐

        命令更新之 reg2docx:将回归结果输出到word

命令更新之t2docx——报告分组均值t检验

爬虫俱乐部2019十一Python编程技术培训报名啦!

数据类型——Dict、Set与Frozenset简析

数据类型介绍——tuple、list和range对象

把pdf文件批量转成docx文件

格式化字符串方法的比较

        朝花夕拾—— 如何输出内存中的矩阵与绘图

        Stata16新功能——定义图形元素的绝对大小

        将数值型计算“一网打尽”——(1)

        Stata16新功能之“框架”——读入多个数据集(1)

       手持Python,斗图不输!

       朝花夕拾——cnstock与cntrade强强联合

关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:statatraining@163.com

投稿要求:1)必须原创,禁止抄袭;2)必须准确,详细,有例子,有截图;注意事项:1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。2)邮件请注明投稿,邮件名称为“投稿+推文名称”。3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。c4134bc0342e582a59ee6062b156fd27.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值