RSS 进阶篇:Huginn - 真·为任意网页定制 RSS 源(PhantomJs 抓取)
烧制网页 RSS 源,主要有 FEED43 和 Huginn 两种方法。
- FEED43:简单免费,六小时抓取一次,每次抓取 20 条静态页面。
- Huginn:自由度高,能自定义抓取频率、内容结构、js 结果、输出样式等;需要搭建服务器,学习 Huginn 抓取规则。
Huginn 准备工作
准备 NAS 或 Debian/Ubuntu 环境的服务器;
参考 deploy Huginn inside of Docker、installation guide for Debian/Ubuntu 来搭建 Huginn。
注册 PhantomJs Cloud ,然后将 API key 保存在 Huginn 的 Credentials 中。很多网站是用 JS 加载动态内容,因此需要 PhantomJs Cloud 来抓取页面 JS 缓存。免费版每天限制抓取 500 次页面,需求不大可建立多个账号使用不同 API key,足够个人使用。
PhantomJs 网页抓取
新建 Huginn 任务组 Scenario「国内应急新闻」,样例抓取链接为 http://www.cneb.gov.cn/guoneinews/
。
页面缓存
使用 Phantom Js Cloud Agent,获得动态网页缓存。
解析网页内容
使用 WebsiteAgent,抓取网页内容。
获取内容路径
使用火狐浏览器打开目标页面,获取 css path 路径。
按下
F12
, 然后点击 Developer Tools 左上角的检查指针。选中要抓取的部分。
回到 Developer Tools 窗口,右键选中的蓝色部分,获取 css path、Xpath。这里以 css path 为例。
初始 css path 路径,
html body div.area.areabg1 div.area-half.right div.tabBox div.tabContents.active table tbody tr td.red a
。css path 原始路径过长,删去不带
.
或#
的节点(节点间以空格“ ”分割),并删去每个节点在.
或#
前的第一个标签,得到.area.areabg1 .area-half.right .tabBox .tabContents.active .red a
。前半部分对节点定位无用,继续省略(比如:中国上海,省略掉中国,大家也知道上海在哪),获得短路径
.tabContents.active .red a
。
特殊路径处理:
- 有些路径中的节点带空格,如
<div class="packery-item article">
,路径中的空格由.
代替,截取为.packery-item.article
。 - 当抓取多种 css path 规则时,用逗号分割,比如
"css": ".focus-title .current a , .stress h2 a",
。
导出 RSS
使用 DataOutputAgent,将抓取内容导出为 RSS。
回到 Scenarios,点击 Data Output Agent 旁的按钮「Actions」>「Show」,复制导出的 xml 链接 http://xxx.xxx/users/1/web_requests/xxx/xxxx.xml
。
点击网盘下载国内应急新闻的详细设置,导入到 Huginn 即可使用。其他问题参考 PhantomJs Cloud 英文攻略。
微信的屏蔽措施非常之多,公众号抓取可以尝试 wechat-feeds。
RSS 合集
汇总的 RSS 永久订阅 feeds,均通过 RSSHub 和 Huginn 制作。如果有兴趣自制 RSS,可参考以下教程。