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

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

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

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

要点:

XML有哪些特质

如何生成XML

字典如何转XML

实战获取知乎每日精选

1.XML有哪些特质

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

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

1).第一行是 XML 声明

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

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

该元素是所有其他元素的父元素,这里的根元素是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的数据结构

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

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

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

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

2).先创建根节点

root=Element(‘Data’)

print tostring(root)

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

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

node=Element(‘people’)

node.set(‘name’,’jack’)

print tostring(node)

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)

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

6).生成XML文件

et=ElementTree(root)

et.write(“demo.xml”)

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

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处理实战运用》

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


4.实战获取知乎每日精选

知乎的每日精选上有大量好玩有趣的文章,其实它是一个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做个知乎日报精选就讲到这里,是不是觉得蛮好玩的,今天的文章希望能给初学者一些启发,若有什么不懂的,也可以留言跟我探讨交流.

    原文作者:菜鸟学python
    原文地址: https://www.jianshu.com/p/8c9c0d9f51b9
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞