Skip to content
forked from miaowm5/RSSGen

RSSGen 是一个使用 Python 语言编写并运行于 Leancloud 平台的简单应用。该应用允许用户通过编写规则来抓取网站的内容并生成一个 RSS

Notifications You must be signed in to change notification settings

mingde816/RSSGen

 
 

Repository files navigation

RSSGen

说明

RSSGen 是一个使用 Python 语言编写并运行于 Leancloud 平台的简单应用。该应用允许用户通过编写规则来抓取网站的内容并生成一个 RSS ,推荐与 KindleEar 共同使用。

包含功能:

部署到 Leancloud

注册 Leancloud 账号,并创建一个应用

下载 RSSGen ,用记事本打开目录下的 auth.py ,填入刚刚创建的应用的 ID ,应用 ID 可以在 Leancloud 对应应用 后台 - 设置 中查看

将应用上传到 Leancloud ,具体的步骤可以参考 Leancloud文档 ,推荐使用 CSDN Code 部署应用

在 Leancloud 应用 后台 - 存储 - 云引擎 - 定时任务 中,添加爬虫任务

函数名称 Cron表达式 说明
clear_old_feed 0 0,5 0 * * ? 每天凌晨删除一天前的旧 RSS
spider_work 0 0,5 0/6 * * ? 每隔六小时抓取一次网站的更新

在 Leancloud 应用 后台 - 存储 - 云引擎 - 设置 中,设置应用的域名

打开上一步设置的主机域名(假设为 rssgen.leanapp.cn),若显示 It works,则表示部署成功

部署到 Heroku

设置好 auth.py 的应用可以直接上传到 Heroku 平台,Heroku 版拥有除了定时任务外网页版全部的功能,所有的数据仍然保存在 leancloud 中,部署到 Heroku 主要用于抓取墙外网页的更新生成 RSS

推荐使用 Dropbox 方式部署应用

功能

假设主机域名为 rssgen.leanapp.cn

设置 RSS 抓取规则

recipe 目录下的每个 py 文件对应一个 rss,文件名以 base 结尾的类为公共库会自动忽略,文件名以 hide 结尾的类不会自动抓取,必要时可以在提供相同接口的前提下重写全部代码,具体可以参考 base.py 文件,以下是必须实现的接口:

名称 类型 说明
recipe 全局变量 该变量需要赋值为一个抓取规则的类,爬虫工作时会传递一个 info 参数对该类进行实例化
info 规则类的属性 纪录了服务器端所保存的抓取信息的对象,防止重复抓取同一内容
name 规则类的属性 用于区分不同规则的标识符,服务器端也将以该名字保存数据
oldest 规则类的属性 要保留的时间最早的文章,用于服务端自动清理旧内容
log 规则类的属性 由 (名称,值) 的元祖组成的列表,对应数据将在每次抓取结束后自动保存到服务端的 log 数据库中
get_item 规则类的实例方法 yield 元祖,每个元祖内容为 (标题,时间,网址,RSS内容)

默认的 base.py 中定义了以下方法和接口可以直接继承使用。sample_recipe 目录中放着一些范例 recipe 可供参考。

属性

名称 类型 说明
capture 字典 储存了执行 process_article 清理文章时所需的数据
capture["catch"] 字符串数组 每个字符串作为 CSS 选择器,提取文章中满足该选择器的内容
capture["remove"] 字符串数组 每个字符串作为 CSS 选择器,删除上一步提取的文章中满足该选择器的内容
capture["nav"] 字符串 文章页码的 CSS 选择器,用于尝试自动拼接分页文章

方法

名称 参数 说明
featch_content 网址字符串 打开网址,返回内容,失败时返回 None
spider_main 探测网址字符串,抓取网址 set 依次抓取 set 中的网页内容,返回由元祖(抓取网址,抓取内容)组成的 list
spider_refresh_capture 探测网址字符串,探测网址内容 spider_main 每次抓取结束后调用,用来抓取分页文章等,返回值将作为下一轮 spider_main 的参数使用
spider_generate_html spider_main 的抓取结果 用于将 spider_main 抓取结果拼接成一个单独的 html 页面
convert_time datetime 将所有 datetime 统一转换为 UTC0 的 datetime,已经包含时区时原有的时区信息将被忽略
get_last_check 获取服务端数据最后的抓取时间(UTC8)
refresh_last_check datetime 将指定时间作为最后抓取时间保存到服务端
process_article 网页内容 根据 capture 属性的设置自动清理文章内容
add_log 名称, 值 向抓取纪录数据库中添加一个指定名称的值

查看正在抓取的 RSS

打开网址 rssgen.leanapp.cn/rss 即可查看所有规则成功导入并开始自动抓取的 RSS

立刻抓取 RSS

打开网址 rssgen.leanapp.cn/rss/save/recipe名称 可以立刻抓取指定 name 的 recipe 更新,该功能可用于在 Heroku APP 上抓取墙外内容(一般对应的 recipe 文件的文件名末尾可以加上 hide 来阻止定时任务自动抓取时的时间浪费)

在 Kindle 上保存网页网址到电脑端

访问网页 rssgen.leanapp.cn/list/save?url=12345&title=54321 可以将网址 12345 以标题 54231 保存

一般来说,该网址是由 KindleEar 或其他第三方程序自动生成的,网址仅使用 urllib.quote 进行一层包装

查看保存的网址

访问网页 rssgen.leanapp.cn/list 可以查看或删除保存的网址

鸣谢

RSSGen 使用了以下库

  • Leancloud
  • Bottle
  • PyRSS2Gen
  • feedparser
  • BeautifulSoup
  • jQuery

About

RSSGen 是一个使用 Python 语言编写并运行于 Leancloud 平台的简单应用。该应用允许用户通过编写规则来抓取网站的内容并生成一个 RSS

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 99.3%
  • Other 0.7%