不麻烦的批量下载:层层“套娃”
- 2026-09-20 01:35:23
❝总是先设计好原子单位的功能。
❞
最近在折腾 RAG。想建立一个家庭数字图书馆。那当然要很多电子书啦。
电子书从哪里找
从哪里找? 最开始想到就是百度夸克网盘。一些公开资源往往是有的,比如四大名著,中国国学等。不过细分一点就没有了。然后想到去网站抓取文本。但是网上抓取,每个网站都不一样,每次都得写脚本,还不好复用,颇为费事,ROI较低。此外,专业技术书籍的电子书在网站上很难找到,通常还要积分虚拟币什么的,直接毙掉我这种懒惰又想白嫖的人。我优先要找专业类书籍(计算机类),因此百度夸克第三方网站都不适合。
于是自然我就问 chatgpt ,哪里可以找电子书网站。chatgpt 给了几个网站,一一点了下,发现 https://zh.z-library.sk/ 是个很好的电子书网站,书很多。有图书评级和文件质量评级。免费用户每日可以下载十本书籍,如果你捐款了(最低 1 美元),每日就可以下载 999 本, 30天。 30天够我一次性搞一把了。不过这个网站要 sci-net。
开始试着搜索了下,感觉还可以。 每日定期下载十本。 一日出了捐款提示,捐点钱就可以下载更多书籍(30天999本,足够了)。想想我这急性子,哪里能忍受每天定期下载之苦?
开始思考如何不麻烦地下载这么多书籍。不麻烦,就是最好我的手工操作极少,甚少人工干预。先不追求快。
书不是每本都要下的。优先下载图书评级 4.0-5.0 , 图书质量 4.0-5.0 ,分数高的优先。手动点击,显然太慢。对于程序员来说,不能自动化操作,简直是一种原罪。 要极致地自动化,一键抵达才行。
于是我让 deepseek 写一个脚本从这个网站搜索和下载书籍。自然,我会先探索下这个网站搜索下载 url 和返回数据,必要的话,会给出一些重要的信息(比如下载网页数据放在工程里让ai去读方便去解析相关信息)。
ai 写好了,然后我运行,报错。ai 埋头干了一阵,给几个命令我试试,然后结果反馈给它。它再继续试。捣鼓了好一会,终于搞定。此处省略一系列排查问题和解决问题的文字。
好了,基本的下载能力有了,接下来就是套娃魔法。
批量下载资源,我的想法是:
总是提供原子单位的选项和组合的选项。比如从单个网站URL下载图片就是原子单位,从多个关联网站URL下载图片就是组合单位。 在原子单位上的下载组合成组合单位的下载。 将组合单位的清单放在文件里,再次组合。
套娃魔法第一层
原子单位
这是最初的命令。用于搜索某个关键字的书籍并下载。
ebook download -k 人工智能 -n 2 --browser 那么怎么套娃呢?
可以把关键字“人工智能”放在清单里。
计算机.txt
人工智能 计算机算法 计算机架构 计算机然后给 ebook download 添加一个 -f 命令,
ebook download -f 计算机.txt -o ~/Downloads/计算机对于文件里的每一行,都扩展成:
ebook download -k 关键字(比如人工智能,算法,架构)-n 2 -o ~/Downloads/计算机 --browser 之所以要两列,是因为电子书的组织存储结构分两层。 计算机/算法/电子书, 计算机/数据结构/电子书。
更好质量的图书
早上过早的时候,突然想到, zk 里图书评级是否跟豆瓣保持一致呢?问了下 chatgpt 不是。我拿下载好的书籍,去豆瓣搜了下,有些是 8.x 分(经典书)的,有些是 6.x 分(畅销书)的。时间有限,精力有限,假使有一万本电子书,我也不可能下载这一万本,只能“择优录用”。
于是我让 deepseek 再写一个在豆瓣上搜索图书的脚本,看上去是这样的:
douban_bk -k 人工智能 --list -o /Users/qinshu/Downloads下载的文件是 /Users/qinshu/Downloads/人工智能.txt, 每一行都是两列: 书名 人工智能。与 ebook download -f 的契约保持一致。
然后整个清单就可以交给
ebook download -f 人工智能.txt -o ~/Downloads/书名-人工智能便利加一层
显然我不可能敲两行命令啊,只能在 ebook download 做文章。
现在我要加一个 --douban-key 可以一下子拿到多个豆瓣书名,生成多个文件,传给 ebook download。
ebook download --douban-key 人工智能 -o ~/Downloads等价于
douban_bk -k 人工智能 --list -o /Users/qinshu/Downloads ebook download -f /Users/qinshu/Downloads/人工智能.txt -o ~/Downloads/书名-人工智能/Users/qinshu/Downloads/人工智能.txt 的每一行都会扩展为:ebook download -k 关键字(比如人工智能的未来)-n 2 -o ~/Downloads/书名(人工智能的未来)-人工智能 --browser 两层套娃!
再加一层套娃
一个关键字可能搜索出多本图书,下载需要一定时长。这会我也不能闲着。得继续“扩大战果”。
--douban-key 架构 只能指定一个关键字啊,要批量怎么办呢? 还是采用老办法。用一个文件。
加一个 --douban-file 计算机.txt 放入豆瓣关键字,计算机.txt 每个关键字都应用 ebook download --douban-key 关键字 -o ~/Downloads 扩展一层。
好了,我们的套娃游戏结束了。
两种套娃
原子单位功能实现后,怎么进行扩展呢?
-l 逗号分隔的列表,适合一个参数,并且参数比较短方便写的情形。 -f 清单列表文件。适合多个参数,且参数较长的情形。 管道: 也可以使用管道,比 -f 要简洁一些,不过使用管道要小心一些,命令行也比较长而繁琐。
总的来说,使用 -f 清单列表文件,灵活性高,且容易理解。还能一链一链串下去。当然,工程上很少使用文件作为传参。可选的,可以使用函数式编程,让函数的结果作为入参。
软件开发启示
其实软件开发同理。 先不要急于吃掉一大块,而是先把原子单位的功能提取出来,然后组合原子功能来实现模块功能。
一点小福利:
我用夸克网盘给你分享了「电子书epubpdf」,点击链接或复制整段内容,打开「夸克APP」即可获取。/~6b313ayrnN~:/链接:https://pan.quark.cn/s/3e4303168d2a
乱七八糟的,计算机、艺术类、诗词曲相对多一点,感兴趣瞅瞅吧。
小结
最后来小结本文的思想:
总是提供原子单位的功能,非常关键! 是套娃的基础。 使用 -l , -f , 管道 进行套娃。推荐使用 -f . 套娃的过程要顺带着让命令更加简洁便利。