如何用 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()
抓取文章内容时,从页面
作者:葛小刚
链接:https://www.58edu.cc/article/1506477957214973953.html
文章版权归作者所有,58edu信息发布平台,仅提供信息存储空间服务,接受投稿是出于传递更多信息、供广大网友交流学习之目的。如有侵权。联系站长删除。