使用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阅读器(一)相关推荐

  1. python代码阅读器_用Python代码实现的RSS阅读器示例

    玩蛇网python之家这篇文章是关于如何使用Python代码实现RSS阅读器示例,如何用Tkinter等模块方法实现RSS订阅器的编写,参考学习过下面的正试代码后就会明白. 简单的说下RSS阅读器是什 ...

  2. 用JSP实现基于Web的RSS阅读器

    2019独角兽企业重金招聘Python工程师标准>>> 一 RSS介绍 根据维基百科(http://zh.wikipedia.org/wiki/RSS)的定义,"RSS是一 ...

  3. 介绍我的一位同事的开源RSS阅读器

    离开原来单位一个多月,自从我离开公司最近有好几位同事离开了.真心祝愿各位工作开心快乐. 这是原来单位的一位同事制作的RSS阅读器,使用C#代码编写. 简要介绍: 无限制级目录.方便的目录添加管理,不限 ...

  4. 基于python简易小说阅读器(一)

    基于python简易小说阅读器(一) 实现功能:界面显示小说内容,界面的最下方有按键实现章节切换   后台需要有小说内容的数据,针对这一块,python的爬虫模块requests可以满足项目需求,前端 ...

  5. 为什么说Thunderbird是最好的桌面RSS阅读器

    也许现在再讨论RSS阅读器似乎已经过时了,毕竟随着社交网络服务的发展,通过一个带有大众评分能力的社交网络(比如reddit),相比RSS的固定订阅而言,也许你能更快地在你所关心的话题上更快地获得新的资 ...

  6. Android Rss阅读器

    前言 前几天去北京面试,题目是让我解析一下腾讯的Rss.之前虽然知道xml,但是自己从来没有去学习怎么解析,在网上查一些例子,但是就是没有解析出来.现在看看还蛮好笑的,因为我那时候是使用sax解析xm ...

  7. Feeder 一款 Mac 上的 RSS 阅读器,更优雅地跟踪最新的新闻和博客文章

    Feeder 一款 Mac 上的 RSS 阅读器,更优雅地跟踪最新的新闻和博客文章 Feeder 是一款 Mac 上的 RSS 阅读器,它可以帮助用户轻松地订阅和管理 RSS 源,让用户可以轻松地跟踪 ...

  8. 类Twitter风格的RSS阅读器

    本文完成于 2 月中旬,其中的反代还是 frp + npm 方案: 什么是 RSS ? RSS 是用 PHP.Laravel.Inertia.js.Tailwind 和 Vue.js 编写的简单的类T ...

  9. Asp.Net+Ajax实现的宝宝RSS阅读器源码下载

    Asp.Net+Ajax实现的宝宝RSS阅读器源码, 适合Ajax初学者学习,功能很简单,用户可以添加RSS地址到数据库,但没有实现RSS地址及名称删除与修改. 当阅读器页面打开时,从数据库获取RSS ...

最新文章

  1. 信息检索及DM必备知识总结:luncene
  2. node --- 监听文件变化(静态、动态、子进程)
  3. 数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型的概念
  4. JEECG 智能开发平台二次开发帮助文档
  5. matlab编译dll vb调用,用matlab的deploytool生成DLL,VB无法调用的问题
  6. linux-mptcp调度算法,NS-3实现MPTCP的轮询调度算法
  7. Redis的C++ client表、Json的C++ client表|汇总|大全
  8. 我的大学专业是计算机英语作文,我的大学计划英语作文(通用5篇)
  9. SQL Server Compact 数据库内容查看工具
  10. asp.net中引入外部js文件,容易产生中文乱码
  11. CentOS7网卡驱动安装过程
  12. java怎么实现直方图均衡化_直方图均衡化原理与实现
  13. 等额本息房贷月供计算
  14. 高防服务器防御阈值买多大合适呢?
  15. 把nasm集成到Visual studio 2013中
  16. CTF线下AWD攻防步骤总结
  17. Python -- Matplotlib:画一条水平线或竖直线
  18. 条件运算符(三目运算符)
  19. expect pexpect on Windows
  20. 美团点评-数据开发一面凉经

热门文章

  1. Project之条形图列表不显示任务名称
  2. 【百度前端学院学习笔记】Day9 圣杯布局和双飞翼布局
  3. 性能分析之解决 jbd2 引起 IO 高问题
  4. 智慧农业云平台解决方案
  5. PHP7安装Oracle扩展
  6. mape( mean absolute percent error)
  7. Android Q 适配
  8. C#简单圆形边框Button——RoundButton
  9. react 学习(一) 实现简版虚拟 dom 和挂载
  10. 这可能会引领通用AI的下一个重大突破