当前位置: 首页 > seo推送 > 正文

网页推送_如何用 KindleEar 推送无 RSS 的网站内容(上篇)

之前书伴曾介绍过利用 Calibre 抓取网站内容制成电子书的方法,可以很方便地生成既美观又实用的期刊样式电

牛皮seo

之前书伴曾介绍过利用 Calibre 抓取网站内容制成电子书的方法,可以很方便地生成既美观又实用的期刊样式电子书Calibre 功能的强大毋庸置疑,不过在实际使用时却有一个明显的不便之处:当你想要定时推送某个内容源时,就必须让运行 Calibre 的电脑一直保持开机状态。

因此,很多小伙伴选择使用有着类似功能,并且能免费托管在 Google App Engine 服务器上的开源程序 KindleEar 来解决这个问题KindleEar 虽然支持直接订阅 RSS,但可惜很多 RSS 供稿可用性并不高,内置的订阅又无法满足个性化的需求,在这种情况下,就有必要学会自己编写可精准获取目标网站内容的抓取脚本。

这里所说的“抓取脚本”也可以理解成为 KindleEar 添加内置订阅,内置的订阅其实也是由一个个定制的抓取脚本组成写这篇文章的动机是网友 Jone 发给书伴的一封长信,他在信中详细描述了自己想要解决的问题:如何在没有编程基础的前提下编写 KindleEar 抓取脚本,并能方便地重新部署到 Google App Engine 上。

所以书伴花了几天研究了一下 KindleEar 的抓取脚本,并将经验分享给需要的小伙伴为了顾及没有任何编程经验的小伙伴,本文会尽可能以普通用户的视角撰写,对涉及代码的部分尽可能做到形象化的说明由于编写 KindleEar 抓取脚本牵涉到测试环境的配置,导致篇幅较长,所以本文分成了“上篇”和“下篇”。

上篇主要是抓取脚本的相关介绍和测试环境的配置步骤,下篇则是编写抓取脚本的具体步骤一、KindleEar 的抓取方式KindleEar 和 Calibre 一样,支持通过“RSS”或“网页(HTML)”两种方式抓取目标网站上的内容。

KindleEar 对 RSS 和 HTML 有着不同的处理方式当目标站点提供 RSS 时,它就会用通用的 RSS 处理模块来提取供稿内容生成电子书,也就是前面提到的“自定义 RSS”直接用 RSS 自然是最方便的,但现实世界的情况总比理想中的复杂,有很多种原因导致我们无法顺利获取 RSS,比如有些网站根本就不提供 RSS,或者提供了 RSS 却只有摘要信息,甚至提供的 RSS 存在格式上的错误无法正常读取等。

RSS 本质上只是一种简单的数据格式,其结构有着相对严格和固定的规范,所以只需要一个通用处理模块就可以应付几乎所有站点的 RSS 供稿而 HTML 页面就没这么省心了,可以说不同网站的 HTML 标签结构存在着天壤之别,所以当目标站点不提供 RSS 时,就只能为其编写高度定制化的抓取脚本。

说点题外话:可能很多小伙伴会疑惑,为什么很多网站都不提供 RSS 呢?RSS 生来就是为了方便用户追踪网站更新的,从用户角度来看是相当方便——不用访问网站就能获取到网站内容更新,但是这却不可避免地影响到了内容提供者的商业利益。

虽然十多年前很多人也为 RSS 做过一些商业化的尝试,但终以失败告终随着 2013 年 Google 关闭 Google Reader,算是宣告了 RSS 大时代的终结现在除了一些博客以及尚有情怀的网站外,大都不再提供 RSS 供稿了,即便提供也只是放点摘要信息,最终的目的还是把用户引导到自己的网站上。

RSS 并没有消亡,只是因为它给了用户太多自由而不太被商业容忍二、KindleEar 的抓取脚本在《Calibre 使用教程之抓取网站页面制成电子书》这篇文章中,书伴详细介绍了如何通过编写 Recipe 脚本的方式让 Calibre 抓取指定网站的内容,KindleEar 也提供了类似的功能。

不过需要注意的是,虽然 KindleEar 的 MOBI 转换模块提取自 Calibre,但是抓取脚本却与 Calibre 的 Recipe 脚本并不通用,这是因为 KindleEar 并没有直接移植 Calibre 的 Recipe 处理模块,而是将其作为参考重新写了一个处理模块,这导致包括脚本后缀名(KindleEar 是 .py,Calibre 是 .recipe)、相关功能的实现等很多方面都有所不同。

因此,你必须遵循 KindleEar 提供的相关功能函数为 KindleEar 编写专用的抓取脚本KindleEar 内置的抓取脚都存放在其项目目录下的 books 目录中,脚本的文件名均以英文命名并以 .py 为后缀。

每个脚本都继承同目录下名为 base.py 的基类,该基类已对很多种抓取方式做了定义,比如 RSS、HTML 页面、漫画等我们所创建的抓取脚本就是通过继承这个基类,再根据实际情况改写、定制其中的一些参数和函数,从而实现对目标网站内容的精准抓取。

KindleEar 的作者在 base.py 做了大量注释,如果你有一定的编程经验,完全可以根据这些注释说明来理解其中的参数和函数都是如何工作的三、KindleEar 的调试环境由于 KindleEar 的运行依赖于 Google App Engine 环境,无法像用 Calibre 测试 Recipe 脚本那样直接在本地运行,所以为了方便测试编写的 KindleEar 抓取脚本,我们需要在本地搭建可以为 KindleEar 虚拟运行环境的 Google App Engine SDK(Windows 还需要安装 Python 环境和相关的 Python 库)。

不要害怕任何技术性字眼,按照步骤一步步做一般不会有问题注意不要忽略任何一段文字1、安装 App Engine SDK下面是 Google App Engine SDK 的下载链接,请根据自己的系统类型选择下载安装:。

Windows 系统:https://storage.googleapis.com/appengine-sdks/featured/GoogleAppEngine-1.9.85.msimacOS 系统:

https://storage.googleapis.com/appengine-sdks/featured/GoogleAppEngineLauncher-1.9.85.dmgLinux 系统:https://storage.googleapis.com/appengine-sdks/featured/google_appengine_1.9.85.zip

因为 KindleEar 是 Python 程序,所以 SDK 还会依赖 Python 环境macOS 系统和 Linux 系统都预装了 Python,而对于 Windows 系统,如果没有安装 Python,就需要手动安装 。

2.7.x 版本的 Python:Windows 系统(64 位):https://www.python.org/ftp/python/2.7.16/python-2.7.16.amd64.msiWindows 系统(32 位):官方下载

https://www.python.org/ftp/python/2.7.16/python-2.7.16.msi此外,KindleEar 的运行还依赖一些第三方 Python 库,这些库需要在命令行中用 pip 命令安装。

注意,本文之后的内容经常会用到命令行,所以应记住,当文中说到输入命令时,你需要打开“终端”(Windows 系统则打开“命令提示符”),把相关命令输入(或拷贝)进去,按回车执行macOS 和 Linux 用户可直接通过执行下面的命令安装这些第三方 Python 库:。

pip install lxml pillow jinja2 pycryptoWindows 用户需要先下载安装微软的 Microsoft Visual C++ Compiler for Python 2.7,因为安装第三方 Python 库的对其有依赖。

安装完成后,通过以下命令安装 KindleEar 依赖的第三方 Python 库:C:\Python\Scripts\pip install lxml pillow jinja2 pycrypto* 提示:上面这条命令假设你的 Python 是默认安装在 C 盘的,如果指定了其它磁盘,请自行更改路径。

2、获取 KindleEar 源代码首先需要获取一份 KindleEar 源代码到本地你可以通过下面的链接下载 ZIP 包解压缩备用:KindleEar 源代码:https://github.com/cdhigh/KindleEar/archive/master.zip。

如果你的电脑已经安装了 Git 工具,也可以通过 Git 的 Clone 命令将源代码拉取到本地:git clone https://github.com/cdhigh/KindleEar.git为了之后上传方便,建议去 GitHub 注册一个账户,然后把 KindleEar 项目 Fork 一份到自己的账户下,这样,在添加好编写的抓取脚本后,可以先将源代码 Push 到你 Fork 的项目中,再按照 KindleEar 搭建教程中的“自动上传”方式利用 Google App Engine 的云端 Shell 重新部署你 Fork 的 KindleEar 项目。

3、在本地运行 KindleEar接下来就是让 KindleEar 在本机运行起来了注意,在这里我们不使用带界面的 Google App Engine Launcher,而只使用它附带的命令行工具默认情况下,Windows 系统可以直接在命令提示符中使用这些命令,而 macOS 系统需要先打开界面版的 Google App Engine Launcher,点击软件的菜单中的“Make Symlinks…”创建命令软链接才能使用命令。

Linux 系统需要添加 PATH 变量才能使用命令打开终端(Windows 系统打开命令提示符)并定位到 KindleEar 的项目目录假设项目在系统桌面上macOS 系统需要输入类似以下命令定位到 KindleEar 项目目录(注意替换 YOURNAME):。

cd /Users/YOURNAME/Desktop/KindleEarWindows 系统则需要输入类似以下命令定位到 KindleEar 项目目录(注意替换 YOURNAME):cd C:\Users\YOURNAME\Desktop\KindleEar

定位到 KindleEar 项目目录后,输入以下命令让 KindleEar 运行起来(注意有两个空格):dev_appserver.py ./app.yaml ./module-worker.yaml当你看到终端(或命令提示符)上出现如下所示的输出,就说明 KindleEar 已经在本机正常运行了:

INFO 2022-05-11 13:51:41,358 sdk_update_checker.py:231] Checking for updates to the SDK.INFO 2022-05-11 13:51:44,383 sdk_update_checker.py:247] Update check failed:

INFO 2022-05-11 13:51:44,613 api_server.py:275] Starting API server at: http://localhost:49342INFO 2022-05-11 13:51:44,625 dispatcher.py:256] Starting module "default" running at: http://localhost:8080

INFO 2022-05-11 13:51:44,667 dispatcher.py:256] Starting module "worker" running at: http://localhost:8081

INFO 2022-05-11 13:51:44,672 admin_server.py:150] Starting admin server at: http://localhost:8000INFO 2022-05-11 13:51:46,928 instance.py:294] Instance PID: 37115

打开浏览器(推荐用 Chrome),输入 http://localhost:8080 即可访问运行在本机上的 KindleEar 程序,输入默认的用户名和密码 admin 即可登入控制界面至此,KindleEar 的调试环境便准备好了。

本文的下篇将会以 China Daily 为例,由浅入深详细说明如何编写 KindleEar 的抓取脚本编写好的脚本可抓取指定板块下指定数量和日期的新闻条目,并将其整合到同一本电子书中,其中还包括对内容页、分页等细节的处理。

最后,把测试成功的抓取脚本上传部署到 Google App Engine 的生产环境上

▲ China Daily 网站抓取效果为方便编写代码,建议先备好一款代码编辑器,推荐 Sublime Text 或 Visual Studio Code如果你对 KindleEar 抓取脚本有什么疑问,或者发现本教程存在的谬误或不详尽之处,欢迎留言。

--------- · END · ---------【推广】书伴推送服务:push.bookfere.com

微信ID:kindle-fere

「书伴」为静心阅读而生


上一篇: 网站主动推送_三部门联合发布《互联网弹窗信息推送服务管理规定》 下一篇:网页推送原理图怎么设置_事关互联网弹窗信息推送!9月30日起施行
返回顶部