知行编程网知行编程网  2022-03-04 06:00 知行编程网 隐藏边栏 |   抢沙发  24 
文章评分 0 次,平均分 0.0

这是菜鸟学Python的第72篇原创文章

阅读本文大概需要5分钟

 

        Python常见的数据文件,我们前面已经讲了2种CSV,JSON (不知道的小伙伴可以回头翻阅一下历史文章近20年五粮液股价分析|CSV文件实战处理,用Python写个迷你出门问问|10几行代码搞定).现在讲第3种XML文件,XML语言是一个较老的结构化数据格式,它是可扩展标记语言,用于标记电子文件使其具有结构性的标记语言,XML 被设计用来结构化、存储以及传输信息。

      其实XML很早就诞生了(那时我还没有上高中呢),XML使用范围非常广,比JSON应用的更广,今天我们就来讲讲Python如何处理XML文件,最后用一个小例子实战获取知乎头条精选

 

要点:

  • XML有哪些特质
  • 如何生成XML
  • 字典如何转XML
  • 实战获取知乎每日精选

1.XML有哪些特质

比如下面这样一个简单的xml:

<?xml version = "1.0" encoding = "utf-8"?>

<data>

<people name="jack">

<age>30</age>

<sex>male</sex>

</people>

</data>

1).第一行是 XML 声明

它定义 XML 的版本(1.0)和所使用的编码(utf-8 : 万国码, 可显示各种语言)

 

2).必须包含根元素(有且只有一个)

该元素是所有其他元素的父元素,这里的根元素是Data

<Data>

..

</Data>

所有的<people>都被包含在<Data>里面

3).元素开始标签必须要有结束标签

<people> 元素有 2个子元素:<age>、<sex>

每个元素都有对应的关闭标签(跟HTML不一样,有一些是不需要关闭的,比如<p>,<br>)

4).XML 标签对大小写敏感

比如<Data>和<DATA>是不一样的

5).XML 属性值必须加引号

<people name=jack>这样会报错的,必须"jack"才行

一般来说Python里对XML文档的处理,常用的模块有ElementTree,第三方的神器lxml,今天我们主要介绍ElementTree模块的使用

2.如何生成一个XML文件

比如要生成如下的XML的数据结构

<?xml version = "1.0" encoding = "utf-8"?>

<data>

    <people name="jack">

        <age>30</age>

        <sex>male</sex>

    </people>

</data>

其实这个不难,分如下几步就可以

1).引入几个重要模块Element,ElementTree,tostring

from xml.etree.ElementTree import Element,ElementTree,tostring

2).先创建根节点

root=Element('Data')

print tostring(root)

>>

<Data />

tostring模块可以把xml数据方便的转成str,然后打印出来,比较直观

3).再创建子节点people,并设置它的属性

node=Element('people')

node.set('name','jack')

print tostring(node)

>>

<people name="jack" />

4).再创建子节点里面的两个孙节点

sub_node=Element('age')

sub_node.text='30'

 

sub_node2=Element('sex')

sub_node2.text='male'

  • 这两个Element都只有内容,没有属性.
  • 而且数字30一定要写成字符串,不能是数字

5).把所有的Element串起来

node.append(sub_node)

node.append(sub_node2)

root.append(node)

print tostring(root)

>>

<Data><people name="jack"><age>30</age><sex>male</sex></people></Data>

6).生成XML文件

et=ElementTree(root)

et.write("demo.xml")

>>

<Data><people name="jack"><age>30</age><sex>male</sex></people></Data>

root是一个大的节点,里面套了很多子节点,子节点又有很多孙节点,现在我们用ElementTree把它生成一个ElementTree的对象,然后生成xml文件.但是这个文件里的xml没有格式化过,非常丑,我们美化一下

 

7).美化打印

如何用Python获取知乎头条精选| XML处理实战运用

 

toprettyxml函数里面的第一个参数,其实就是缩进空格的数量,我们这边填了4个空格,美观输出的时候就可以看到缩了4个空格

 

思考题:美观只能打印显示,如何把demo.xml文件里面的数据也美观一下并写入一个新的xml文件

 

 

3.如何把字典转换成XML

比如我们有一个字典d1={'name':'leo','age':30,'sex':'male'}

如何生成一个xml格式的数据呢,其实也是用到了Element,原理查不多,我们看代码:

如何用Python获取知乎头条精选| XML处理实战运用

>>

<Data><age>30</age><name>leo</name><sex>male</sex></Data>

是不是原理和前面一个例子差不多,尤其要注意的是str(value),一定要把内容的值str化.

实战获取知乎每日精选

 

知乎的每日精选上有大量好玩有趣的文章,其实它是一个rss订阅(rss也叫聚合内容,是使用最广泛的XML应用)里面数据都是标准的XML格式,下面我的小程序就来获取并处理这些数据

如何用Python获取知乎头条精选| XML处理实战运用

1).用urllib2获取知乎上的每日精选

2).用parse模板把rss上的xml数据转成ElementTree对象

3).搜索xml里面的主节点channel下面的所有item内容

4).找到title和link,存入top_news列表里面

5).把内容写到文件中,注意win下encode用gbk解析,linux/mac下encode需要用utf-8

 

看一下输出:

如何用Python获取知乎头条精选| XML处理实战运用


Python做个知乎日报精选就讲到这里,是不是觉得蛮好玩的,今天的文章希望能给初学者一些启发,若有什么不懂的,也可以留言跟我探讨交流.

 

ZZS

优秀人才不缺工作机会,只缺适合自己的好机会。但是他们往往没有精力从海量机会中找到最适合的那个。100offer 会对平台上的人才和企业进行严格筛选,让「最好的人才」和「最好的公司」相遇。


欢迎大家关注 菜鸟学Python",更多好玩有趣的Python原创教程,趣味算法,经验技巧,行业动态,尽在菜鸟学Python,一起来学python

历史人气文章

 

Python语言如何入门

同学,学Python真的不能这样学

用Python写个弹球的游戏

Python写个迷你聊天机器人|生成器的高级用法

用Python破解微软面试题|24点游戏

2道极好的Python算法题|带你透彻理解装饰器的妙用

一道Google的算法题 |Python巧妙破解

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享