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

在本文的“中篇,我们已经准备好了一个能正常工作的 KindleEar 订阅脚本,但使用它生成的电子书存在许多问题,如没有设定捕获文章的时间范围,也没有处理文章列表和文章内容的页面,文章标题也有冗余信息。本文将继续改进订阅脚本,处理这些细节,使生成的电子书更加完美。

   

目录

   

[ 上篇    ]
1、KindleEar 订阅方式
2、KindleEar 订阅脚本
3、KindleEar 调试环境
1、安装 App Engine SDK
2、获取 KindleEar 源代码
3、 在本地运行KindleEar
[ 中篇    ]
1.创建一个新的订阅脚本
2、订阅脚本的工作原理
3、从网站抽取文章 URL
4、分析 HTML 标签结构
1、 分析文章列表HTML 标签结构
2、 分析文章内容HTML 标签结构
5.测试订阅脚本的推送
[ 下篇    ]
1.文章列表的页面和限制项目
2.修改文章内容的页面和细节
3、上传到 Google App Engine

以下内容分为三部分:首先是文章列表的页面和条目限制,然后是文章内容页面的页面和文章标题的处理,最后介绍了本地上传和 Google Cloud 云端 Shell 上传两种上传 KindleEar 项目方式。

1.文章列表的页面和限制项目

通常我们不需要抓取网站上所有的文章条目,所以我们应该从文章数量”或“时间范围这两个纬度限制了文章的项目。在设定条件时,您可以选择其中一个或两个不同范围的交叉点。本例采用后者:首先设置和捕获 40 文章,然后在此基础上保留 1 日内的文章。由于设置值超过单页文章的数量,列表也需要翻页。

以下代码已根据上述需要进行修改。可以看出,在以前代码的基础上,新导入了一个处理时间模块,并添加了 2个参数和 3个自定义函数。让我们详细解释一下这些新代码做了什么。

首先,我们从 开始Python 在标准库中导入时间处理模块 datetime,在验证文章的时间范围时范围时使用。

然后新增 max_articles_per_feed    和 oldest_article    两个参数,前者用个主题中捕获的文章数量,后者用于设置文章需要保留多长时间才能更新。这两个参数的值都是数字。在设置文章的时间范围时,应注意:如果设小于或等于 365    单位为天,否则单位为秒,0    表示时间范围没有限制。

最后,添加了三个自定义函数,即 ParsePageContent()OutTimeRange()    和 GetResponseContent()。其中函数 ParsePageContent()    的逻辑来自以前的 ParseFeedUrls()    为了将递归处理列表翻页,在函数中拆卸并调用,还增加了对文章数量和发布时间的判断,以便根据设定条件过滤文章。

根据页面链接HTML 通过在代码中搜索标签结构Next    字符的 a    标签确定当前列表是否有下一页,如果有,请继续调用 ParsePageContent()    提取下一页,直到达到设定的抓取量。

▲ 翻页链接显示效果和标签结构

▲ 翻页链接结构描述

另外两个函数的功能相对简单:OutTimeRange()    用于判断文章的发布时间是否超过设定范围,然后将结果返回到调用函数;GetResponseContent()    用于请求输入的页面链接,然后将响应内容返回到调用其函数,主要是为了方便以后再次使用,因为以下处理文章内容也需要请求页面内容。

2.修改文章内容的页面和细节

处理完文章列表的翻页后,我们将处理内容的一些细节:内容页面的翻页和内容标题上的冗余信息的删除。

以下是本文完善后的代码和最终完成的代码。新代码主要调用基类中的 processtitle()    和 preprocess()    前者用于处理文章标题,后者用于处理文章内容。

函数 Items()    抓取文章内容时,从页面

阅读剩余
THE END