如何用Python获取知乎头条精选| XML处理实战运用
这是菜鸟学Python的第72篇原创文章
阅读本文大概需要5分钟
Python常见的数据文件,我们前面已经讲了2种CSV,JSON (不知道的小伙伴可以回头翻阅一下历史文章近20年五粮液股价分析|CSV文件实战处理,用Python写个迷你出门问问|10几行代码搞定).现在讲第3种XML文件,XML语言是一个较老的结构化数据格式,它是可扩展标记语言,用于标记电子文件使其具有结构性的标记语言,XML 被设计用来结构化、存储以及传输信息。
其实XML很早就诞生了(那时我还没有上高中呢),XML使用范围非常广,比JSON应用的更广,今天我们就来讲讲Python如何处理XML文件,最后用一个小例子实战获取知乎头条精选
要点:
XML有哪些特质
如何生成XML
字典如何转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模块的使用
比如要生成如下的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).美化打印
toprettyxml函数里面的第一个参数,其实就是缩进空格的数量,我们这边填了4个空格,美观输出的时候就可以看到缩了4个空格
思考题:美观只能打印显示,如何把demo.xml文件里面的数据也美观一下并写入一个新的xml文件
比如我们有一个字典d1={'name':'leo','age':30,'sex':'male'}
如何生成一个xml格式的数据呢,其实也是用到了Element,原理查不多,我们看代码:
>>
<Data><age>30</age><name>leo</name><sex>male</sex></Data>
是不是原理和前面一个例子差不多,尤其要注意的是str(value),一定要把内容的值str化.
实战获取知乎每日精选
知乎的每日精选上有大量好玩有趣的文章,其实它是一个rss订阅(rss也叫聚合内容,是使用最广泛的XML应用)里面数据都是标准的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做个知乎日报精选就讲到这里,是不是觉得蛮好玩的,今天的文章希望能给初学者一些启发,若有什么不懂的,也可以留言跟我探讨交流.
ZZS
优秀人才不缺工作机会,只缺适合自己的好机会。但是他们往往没有精力从海量机会中找到最适合的那个。100offer 会对平台上的人才和企业进行严格筛选,让「最好的人才」和「最好的公司」相遇。
扫描下方二维码,注册 100offer,谈谈你对下一份工作的期待。一周内,收到 5-10 个满足你要求的好机会!
欢迎大家关注 菜鸟学Python",更多好玩有趣的Python原创教程,趣味算法,经验技巧,行业动态,尽在菜鸟学Python,一起来学python吧
长按二维码,关注【菜鸟学python】
来源 | 菜鸟学Python
作者 | xinxin
本文章为菜鸟学Python独家原创稿件,未经授权不得转载