自己烧制RSS

周末大雪,在家研究了下如何烧制RSS。首先RSS不是一道菜,如果不了解RSS的可以度娘一下。这里简单解释一下,个人理解RSS主要是简化信息,不需要直接访问相关的网站就可以收集到需要的信息。

一个例子,投资股票的人经常关注雪球上所买股票公司的信息。一种方式访问雪球,然后通过搜索相应的公司来获取信息;另外一种是能通过RSS阅读工具直接访问雪球的信息,不需要直接登录雪球网站。

下面介绍的就是一种使用foxmail RSS来通过订阅RSS 直接访问雪球文章的方法。

RSS的原理很简单,就是将网站的信息使用xml格式重新格式化一份,剔除其他无关的,只保留简单的信息,避免广告等信息的干扰。并且将自己关心的信息集中在一个界面中访问,每天看完工作邮件后,顺便看下自己订阅的关注的信息,非常方便。

RSS从1995年诞生到现在命运波折,很多RSS阅读器都相继关闭,究其原因RSS对于网站内容提供商没有好处(用户可以不用经常直接访问网站了,特别是广告没人看了,少了收入),对RSS阅读器开发者也没多少盈利点,只有对用户来说有用处。所以现在很多站点都不提供RSS服务。那么我们要想利用RSS订阅信息,只能靠自己想办法,饭店越来越少,只能自己烧菜吃了

现在用的比较多的有feed43,能够通过简单定制生成自己rss信息源。烧制过程比较简单,试用后感觉灵活性不足,于是自己研究了一下,简单写了一个工具,理解了原理后续自己可以随意扩展,方便很多。定制化强的东西,自己的用的才趁手

基本原理是,通过爬虫程序爬到相应的信息,然后自己组装RSS信息源。借助python强大的开发生态,整个代码不足百行

爬虫使用的是scrapy,组装rss信息源使用的是PyRSS2Gen。比较简单,直接上代码:

# _*_ coding:utf-8 _*_
import sys
import scrapy
from scrapy.http import Request
import json
import PyRSS2Gen,datetime,re

class GetXueQiuNewsSpider(scrapy.Spider):
    name = "getXueQiuNews"
    allowed_domains = ["[xueqiu.com](http://xueqiu.com/)"]
    def __init__(self, corpName=None, rssFileName=None, *args, **kwargs):
        super(GetXueQiuNewsSpider, self).__init__(*args, **kwargs)
        self.corpName = corpName
        self.rssFileName = rssFileName
        self.start_urls = [
        "[https://xueqiu.com/statuses/search.json/?sort=relevance&source=all&q=](https://xueqiu.com/statuses/search.json/?sort=relevance&source=all&q=)"+self.corpName.decode('gbk')+"&count=10&page=1"
    ]
    
    def parse(self, response):  
        contents = json.loads(response.body_as_unicode())  
        title_pre =contents['list'][0]['title']
        a1 = [re.compile(r](http://re.compile(r/)'\<.*?\>')
        title = a1.sub('',title_pre)
        items = []
        for content in contents['list']:
            title_pre = content['title']
            a1 = [re.compile(r](http://re.compile(r/)'<.*?\>')
            title = a1.sub('',title_pre)
            target = content['target']
            link = "[https://xueqiu.com](https://xueqiu.com/)"+target
            description = content['text']
            pubDate = content['timeBefore']
            item = PyRSS2Gen.RSSItem(title,link,description,pubDate)
            items.append(item)
        rss = PyRSS2Gen.RSS2(  
            title =  u"雪球-" + self.corpName.decode('gbk'),  
            link = self.start_urls[0],
            description = u"雪球和"+self.corpName.decode('gbk')+u"相关的内容",  
            lastBuildDate = datetime.datetime.now(),
            items = items)
        if self.rssFileName is None:
            self.rssFileName = "default.xml"
        rssFileName = "[d://mine//infospy//rss//](file:///d://mine//infospy//rss//)"+self.rssFileName
        rss.write_xml(open(rssFileName, "w"))

上面的代码根据实际情况,修改rssFileName存放的路径。
1、使用 scrapy crawl getXueQiuNews -a corpName="工商银行" -a rssFileName="xueqiu-icbc.xml" ,可以生成一个雪球工商银行的rss源,同样可以换个关键词制定其他rss信息源。
2、到生成的xml rss文件的目录中执行 python -m SimpleHTTPServer 8000,在本地起一个http服务,便于rss阅读器订阅和访问
3、以foxmail的rss阅读工具为例,订阅这个rss源。



4、可以将 scrapy crawl getXueQiuNews -a corpName="工商银行" -a rssFileName="xueqiu-icbc.xml" 做成一个定时任务,如1小时执行一次,那么这个信息源就会每小时更新一次,在rss阅读器中就能定时的更新了。
5、如果自己有公网服务器,可以部署到公网上就可以随时随地访问了。

这个方式不依赖任何的外部服务,全部自助,并且可以比较方便的扩展,可以将自己关心的信息都烧制成rss,借助爬虫自动的获取信息,让自己关心的信息尽在掌握。

最后想说的, Life is short, you need Python ,一点没错!使用python看似复杂的问题分分钟钟搞定!

参考资料:

1、scrapy知识:https://scrapy.org/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • scrapy学习笔记(有示例版) 我的博客 scrapy学习笔记1.使用scrapy1.1创建工程1.2创建爬虫模...
    陈思煜阅读 12,653评论 4 46
  • 今天,匆匆忙忙的带着狗,就往绛县走,在其中发生了许多有趣的事情。 在我们上了高速,没过一会儿,我们下了服务区,...
    雨_Lyj阅读 208评论 0 1
  • 速写captain cook's 的小屋
    素言简说阅读 302评论 1 6
  • 后来,我在文艺范的路上越走越远,偶尔假装有思想,偶尔假装很文艺,多数情况都是自说自语。 这世道真是凉薄,这个秋天真...
    Hebetow阅读 512评论 2 4
  • 塞满了一个行李箱,一个背包,开始了既期待又迷茫的三个月的东京之行。 开始的一个月是重复和单调的,却很充实,...
    孙牛牛阅读 252评论 6 2