美文网首页
自己烧制RSS

自己烧制RSS

作者: yanndy | 来源:发表于2018-01-28 10:29 被阅读0次

    周末大雪,在家研究了下如何烧制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/

    相关文章

      网友评论

          本文标题:自己烧制RSS

          本文链接:https://www.haomeiwen.com/subject/wxyaaxtx.html