本程序是一个比较简陋的,制作 RSS 输出的小爬虫。
在针对不同网站写好抓取规则后,随便丢进一个 PHP 空间就能给使用。
然后 PHP 空间绑定的域名 + 这个文件的名字,例如:project-user.rhcloud.com/rssfile.php ,便是 RSS 地址。
序
以前一直都是用 Feed43 / Fivefilters_Create-RSS + Fivefilters_Full-Text-RSS(利用开源程序自己搭建的),来给没有 RSS 输出的站点,制作全文 RSS。
虽然 Feed43 简单易用服务稳定,但毕竟无法覆盖所有场景。很多结构比较混乱&需要修改文章内容的站点都无法处理。而且多数情况下制作出来的 RSS 也不是全文的,如果想要全文输出,还必须经过 Fivefilters_Full-Text-RSS 程序来提取正文并转制为全文 RSS。转制后的订阅网址又长又乱。也不知道有没有缓存,不然会对使用的 PHP 虚拟主机造成比较大的压力。
最好的解决办法是写爬虫,不过由于自己不会又厌学,就一直拖着。之后尝试用 PySpider Phpfetcher 来做,但都没成。
直到2个月前看到了该博主的文章([教程:RSS全文输出,自己动手做](http://www.rssfull.net/turorial160710)),才终于硬着头皮看代码,改出了几个能用的RSS爬虫出来。
几个修改点
俗话说万事开头难,这个心理障碍一旦迈了过去,手也就停不下来,因为这个教程版还有很多问题:
1. 使用正则表达式来抽取数据
由于正则表达式的编写、测试都较为麻烦,于是改为用 phpQuery 获取想要的网页区域,偶尔用正则来处理这部分的代码内容。
2. 需要 cron 服务去定时执行这个爬虫脚本
我目前遇到的很多免费虚拟主机都不支持 cron 功能,这就让人很郁闷啦,总不能一直给主机续费吧(虽然不贵,可我节俭)。
而且还得另外在 cron 中设置每个脚本的定时时间,这样管理起来也麻烦。
所以借鉴 [RSS Extender](https://github.com/lformella/rss-extender) 的思路,小改一通。还加了一道检查缓存文件修改时间的步骤。
这样以后,不仅能直接订阅这个爬虫脚本的网址,还能在RSS阅读器抓取RSS内容时,触发爬虫脚本。
然后脚本就会检查有没有缓存的RSS文件?
有的话,再判断文件的修改时间是不是距离现在太久需要更新了?
不久,就直接读取缓存的RSS文件内容,输出给RSS阅读器。
久的话,就赶紧去爬一遍要订阅的网站,生成缓存文件后,输出给RSS阅读器。
此外,增加了模拟登录抓取数据功能。
当然,这个爬虫还是很简陋,缺失很多功能,想要整体管理起来也不方便。
不过基本需求既然满足了,也就先凑活用吧!
很好,现在这个年代用rss的越来越少了,为这种精神点个赞。
也想起来前些天,看到一感兴趣的博客,没有rss。
@zhangolve 是啊,很多 Github pages 搭建的博客就没有 RSS,还得手写规则烧制。