使用Python编写RSS阅读器(一)
使用Python编写RSS阅读器(一)
最近想写一个Python的RSS阅读器。
先来了解一下什么是RSS。所谓的RSS,即Really Simple Syndication(真正简单的信息聚合),它使用规定的XML格式提供信息内容。你访问一个RSS信息源(例如,知乎每日精选,http://www.zhihu.com/rss),就可以得到一个XML文件。对于信息发布方来说,也很简单,只要每天在固定时间生成一下XML文件就可以了。
RSS技术非常简单,它是XML技术的一个封装,规范了信息的XML格式。
一、RSS文件格式
我抓取了腾讯国际新闻的RSS,http://news.qq.com/newsgj/rss_newswj.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="/css/rss_xml_style.css"?><rss version="2.0"><channel><title>新闻国际</title><image><title>新闻国际</title><link>http://news.qq.com</link><url>http://mat1.qq.com/news/rss/logo_news.gif</url></image><description>新闻国际</description><link>http://news.qq.com/world_index.shtml</link><copyright>Copyright 1998 - 2005 TENCENT Inc. All Rights Reserved</copyright><language>zh-cn</language><generator>www.qq.com</generator><item><title>意大利政党达成共识 推举54岁法学教授为总理人选</title><link>http://news.qq.com/a/20180522/001629.htm</link><author>www.qq.com</author><category/><pubDate>2018-05-22 05:05:14</pubDate><comments/><description>意大利五星运动党领导人迪马约当地时间21日,意大利五星运动党和联盟党代表再次与总统马塔雷拉会见,呈交组阁计划和内阁初定人选,为联合组建新政府进一步扫清道路。经过连日密集的谈判磋商,双方就组阁各项事宜达成共识,联合组阁协议也分别在两党党内获得通过。当天,两党确认推举现年54岁的法学教授朱塞佩·康特(Giuse</description></item><item><title>美国务卿:美国将确保伊朗永远无法拥有核武器</title><link>http://news.qq.com/a/20180522/001182.htm</link><author>www.qq.com</author><category/><pubDate>2018-05-22 03:09:38</pubDate><comments/><description>中新社华盛顿5月21日电美国国务卿蓬佩奥21日在华盛顿的美国传统基金会演讲,阐述美国在退出伊核全面协议后新的对伊战略。资料图:美国国务卿蓬佩奥。中新社记者邓敏摄今年3月8日,美国总统特朗普宣布美国将退出伊核全面协议,重启对伊制裁。蓬佩奥21日在演讲时表示,美国将继续与盟友合作,打击伊朗破坏该地区稳定的行为、</description></item>......</channel>
</rss>
根据RSS2.0的规范,一个RSS的XML文件,其根节点是<rss version="2.0">,根节点之下有一个<channel>(频道)节点,<channel>节点的开始部分是频道的描述,包含如下信息:
- title:标题
- image:图片
- description:描述
- link:链接
- copyright:版权
- language:语言
- generator:生成者
一个<channel>中包含若干个<item>(项目),每个<item>包含如下信息:
- title:标题
- link:链接
- author:作者
- category:分类
- pubDate:发布日期
- comments:备注
- description:描述
信息发布方每天会更新这个文件,所以如果你想建立自己的新闻数据库,只要每天抓取一次这个文件,将内容转存入自己的数据库即可。
我写了一个小程序用于抓取这个文件:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import requests
import codecsurl = 'http://news.qq.com/newsgj/rss_newswj.xml'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36'}
page = requests.get(url, headers=headers)
page.encoding = 'utf-8'
page_content = page.text
f = codecs.open('d:/news.txt', 'w', 'utf-8')
f.write(page_content)
f.close()
二、Python解析RSS文件
从网络上抓取到RSS的XML文件后,通常需要解读它,然后将相应的部分转存入数据库系统,所以需要从XML文件中找出信息的相关内容。
在Python中解析RSS,我主要介绍两种方法。
1. 使用BeautifulSoup
解析HTML文件,BeautifulSoup是很好用的,它也可以解析XML文件。
在解析XML文件之前,先装一个lxml插件(pip install lxml),lxml是一种HTML/XML文件的解析器。
之后就可以使用BeautifulSoup解析文件了。
代码如下:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import requests
import codecs
from bs4 import BeautifulSoupurl = 'http://news.qq.com/newsgj/rss_newswj.xml'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36'}
page = requests.get(url, headers=headers)
page.encoding = 'utf-8'
page_content = page.text
soup = BeautifulSoup(page_content, 'lxml-xml') # 指定文件解析器为lxml
news = soup.select('rss > channel > item')
f = codecs.open('d:/news.txt', 'w', 'utf-8')
for i in range(len(news)):f.write(u'标题:' + news[i].title.string + '\r\n')f.write(u'内容:' + news[i].description.string + '\r\n')f.write(u'链接:' + news[i].link.string + '\r\n\r\n')
f.close()
2. 使用feedparser
先安装一下feedparser(pip install feedparser),feedparser专用于解析RSS格式的XML文件。
下面是一个命令行下的简单示范:
feedparser用起来很简单,首先调用feedparser.parse("news.txt")解析XML文件,得到解析结果之后,调用feed.title之类的方法可以得到<channel>的相关信息,调用entries[i].title之类的方法可以得到<item>的相关信息。
想了解feedparser的具体用法,请参考它的文档:https://pythonhosted.org/feedparser/。
使用Python编写RSS阅读器(一)相关推荐
- python代码阅读器_用Python代码实现的RSS阅读器示例
玩蛇网python之家这篇文章是关于如何使用Python代码实现RSS阅读器示例,如何用Tkinter等模块方法实现RSS订阅器的编写,参考学习过下面的正试代码后就会明白. 简单的说下RSS阅读器是什 ...
- 用JSP实现基于Web的RSS阅读器
2019独角兽企业重金招聘Python工程师标准>>> 一 RSS介绍 根据维基百科(http://zh.wikipedia.org/wiki/RSS)的定义,"RSS是一 ...
- 介绍我的一位同事的开源RSS阅读器
离开原来单位一个多月,自从我离开公司最近有好几位同事离开了.真心祝愿各位工作开心快乐. 这是原来单位的一位同事制作的RSS阅读器,使用C#代码编写. 简要介绍: 无限制级目录.方便的目录添加管理,不限 ...
- 基于python简易小说阅读器(一)
基于python简易小说阅读器(一) 实现功能:界面显示小说内容,界面的最下方有按键实现章节切换 后台需要有小说内容的数据,针对这一块,python的爬虫模块requests可以满足项目需求,前端 ...
- 为什么说Thunderbird是最好的桌面RSS阅读器
也许现在再讨论RSS阅读器似乎已经过时了,毕竟随着社交网络服务的发展,通过一个带有大众评分能力的社交网络(比如reddit),相比RSS的固定订阅而言,也许你能更快地在你所关心的话题上更快地获得新的资 ...
- Android Rss阅读器
前言 前几天去北京面试,题目是让我解析一下腾讯的Rss.之前虽然知道xml,但是自己从来没有去学习怎么解析,在网上查一些例子,但是就是没有解析出来.现在看看还蛮好笑的,因为我那时候是使用sax解析xm ...
- Feeder 一款 Mac 上的 RSS 阅读器,更优雅地跟踪最新的新闻和博客文章
Feeder 一款 Mac 上的 RSS 阅读器,更优雅地跟踪最新的新闻和博客文章 Feeder 是一款 Mac 上的 RSS 阅读器,它可以帮助用户轻松地订阅和管理 RSS 源,让用户可以轻松地跟踪 ...
- 类Twitter风格的RSS阅读器
本文完成于 2 月中旬,其中的反代还是 frp + npm 方案: 什么是 RSS ? RSS 是用 PHP.Laravel.Inertia.js.Tailwind 和 Vue.js 编写的简单的类T ...
- Asp.Net+Ajax实现的宝宝RSS阅读器源码下载
Asp.Net+Ajax实现的宝宝RSS阅读器源码, 适合Ajax初学者学习,功能很简单,用户可以添加RSS地址到数据库,但没有实现RSS地址及名称删除与修改. 当阅读器页面打开时,从数据库获取RSS ...
最新文章
- 信息检索及DM必备知识总结:luncene
- node --- 监听文件变化(静态、动态、子进程)
- 数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型的概念
- JEECG 智能开发平台二次开发帮助文档
- matlab编译dll vb调用,用matlab的deploytool生成DLL,VB无法调用的问题
- linux-mptcp调度算法,NS-3实现MPTCP的轮询调度算法
- Redis的C++ client表、Json的C++ client表|汇总|大全
- 我的大学专业是计算机英语作文,我的大学计划英语作文(通用5篇)
- SQL Server Compact 数据库内容查看工具
- asp.net中引入外部js文件,容易产生中文乱码
- CentOS7网卡驱动安装过程
- java怎么实现直方图均衡化_直方图均衡化原理与实现
- 等额本息房贷月供计算
- 高防服务器防御阈值买多大合适呢?
- 把nasm集成到Visual studio 2013中
- CTF线下AWD攻防步骤总结
- Python -- Matplotlib:画一条水平线或竖直线
- 条件运算符(三目运算符)
- expect pexpect on Windows
- 美团点评-数据开发一面凉经