type
status
date
slug
summary
tags
category
icon
password

背景介绍

hello,大家好,今天在网上闲逛的时候,发现了一个很好用的插件,可以将浏览的网页生成epub电子书,接着下载到本地,这是项目主页,项目是很好的,但是有下载限制,本着将白嫖精神发扬光大的精神,我坚决say no,而且要一个个网页手动点击保存,很是不便,加上目前插件响应速度还不快,就更催生了我要自己写一个小代码的决心。
因为我最近在看nesslabs上的文章,也强烈建议朋友们去看看,很值得。就想着拿它来练手。我的需求是批量抓取nesslabs上的文章,以此来生成epub文件,可以在kindle等阅读器上阅读。

我的实现路径

  1. 批量获取文章链接;
  1. 解析链接,获取文章内容,生成json文件;
  1. 读取json文件,生成epub文件;

声明

本人完全没有代码基础,完全是靠着与chatgpt沟通对话来获取代码,包括上述的的实现路径,或许很可笑,如果你愿意纠正我,欢迎评论区留言。

实现步骤

step1:测试是否可以抓取网站

首先我测试了该网站是否可以通过爬虫的方式来获取信息。询问chatgpt后得到以下代码:
结果证实是可以读取到网页的所有内容,说明该网站没有进行反爬虫的设定,这是第一步前提,很显然,我们通过了。

step2:获取每个文章链接

查询网站的html结构,当然,也可以让chatgpt来帮忙,但是我发现chatgpt解构的结果并不准确,可能是我的版本不够的原因,我还是用3.5的模型。所以我自己在网站上打开F12进行查询,找到我要抓取的标签属性。
例如我要抓取的网址是:
通过F12可以看到文章列表存在<ol>标签里。
notion image
这个时候我就可以告诉chatgpt,当然,这是一个反复对话的过程。按照我的经验来看,你可以让它给你完整的可以直接运行的代码,重复再重复,直到获得你想要的结果。
以下是参考的可以获取到链接的代码:

step3:解析链接内的文本,并输出为json格式

由于链接存放的网页与打开链接后的网页结构不一样,这时我还需要去文章打开后的网站上找到存放文章的具体标签,所幸,这个网站很简单,如图:
notion image
所以可以直接告诉chatgpt,文章存放的标签是什么属性的,让代码去循环查找这样的标签即可。代码如下:

step4:读取json文件,生成epub电子书

这一步程序实现是很简单的,但是有一个关键,我们要获得的是一个标准规范的epub格式电子书,而不是一个只有.epub的文件,这是有差别的。要生成一个可读的epub电子书,要包含基本的信息:
例如封面图片、文章内容、元数据等,还有一个叫什么书脊(spine),这个也是必须的。
所以我就问chatgpt:
🤔
我的目的是利用这个json文件生成epub文件,希望在生成json文件的时候,尽量符合epub文件的生成规则。
chatgpt很好地理解了我的诉求,但是我又发现了一个问题,生成后的文本虽然都能阅读,但是是把所有的<p>标签内容都整合在一起的,又进行了分段。
在测试epub格式是否可读的过程中,我是用calibre内置的阅读器来进行测试的,这个时候又萌生了一个想法,是否可以用calibre的翻译插件,来进行翻译呢?最后是可行的,但是第一个版本输出的时候,翻译插件无法读取到正文,所以我就让chatgpt按照健壮的html格式来生成html文件,接着再整合html文件输出epub。
以下是代码:

step5:利用calibre翻译工具,输出中英双文电子书

这一步不是本文重点,不多赘述,只需要下载最新版本的calibre,按照好Ebook translator即可。
notion image
输出效果:
notion image

总结

最后输出的内容由于编码原因,输出英文的时候有些乱码,对我来说并没有太大影响,也就放着了。主要是我尝试问了chatgpt,它搞不定,那我就更搞不定了。
以上就是全部内容了,谢谢各位观看。
最后声明:该例仅供学习,无任何不良意图。
《繁花》——一场上海式别离Notion搭建个人博客|遇到的问题记录
  • Cusdis
MarkLin
MarkLin
自媒体创业、间歇性gap
统计
文章数:
23
Announcement
🎉付费咨询请加我微信:linmaobang🎉
擅长电子书管理,封面、转格式、kindle电子书下载与转换、DRM破解、KINDLE传书等
十年软件销售经验,ToB软件销售!有些经验可以带你入门。
自媒体创作者:全网搜索mark.lin就能找到我。
-- 感谢您的支持 ---
👏欢迎骚扰👏
 
2024 MarkLin.

MarkLin’s BLOG—每一秒都值得被记录 | 自媒体创业、间歇性gap

Powered by NotionNext 4.2.3.