豆瓣读书开放 api
by acdzh · 2022年5月19日15:36 · 118 WORDS · ~ 1 mins reading time · 0 Visitors |
在很久很久以前, 豆瓣还是有开放的 api 接口的. 只需要一个 api key就可以使用. 但是后来网络上流传的 api key 一个接一个失效, 豆瓣的 api 接口虽然还在, 但是没有办法继续使用了.
如果有人用过 Calibre 这个电子书管理软件的话, 应该会记得它自带一个豆瓣读书的刮削器. 这个刮削器基于豆瓣官方的 api. 在换过 n 个网上找来的 api key 之后, 我不得不接受了一个悲催的现实, 这玩意用不了了. 不过好在在它彻底失效前, 我已经把自己积攒的一千多本书籍整理完了. 虽然不再是一个硬性需求, 但是每次添加新书籍仍然是一个很蛋疼的事情.
所以时隔两年之后, 我做了一个不受限制的豆瓣读书的 api. 为什么不受限制呢, 因为是直接爬取的豆瓣的网页. 虽然这听起来多少有点不道德, 但是毕竟是你豆瓣先封禁掉所有 api key 的. 既然不想让大家用你的 api, 那就不要做 api. 做了 api 再把所有的 key 都干掉, 真有你的喔, 豆瓣.
先放个地址在这里: https://github.com/acdzh/douban-book-api . 详细使用可以去看文档, 我不想复制一份文档贴这里, 以后文档有改动还要跟着同步该, 太麻烦了.
功能很简单, 一个根据 isbn / id 直接获取信息, 一个搜索, 虽然搜索结果只有第一页 (又不是不能用). 大概就是起一个自己的服务之后, 它就会根据你的查询去爬取豆瓣上相应的页面, 解析之后再返回给你. 当然为了不让服务死的太快, 中间做了一层缓存.
同样为了防止服务死的太快, 也可以有另一种奇怪的使用方式. 配套有一个油猴的脚本, 配置完部署后的服务地址, 这个脚本就可以在每次浏览豆瓣读书的页面时, 自动把信息发送给服务做缓存, 这样在使用服务时甚至可以不用去爬豆瓣.
另外, 最初的目的是给 Calibre 用, 所以对应也有一个 Calibre 的插件.
关于缓存, 最初的缓存借鉴了 Linux 的设计思想, 所以所有缓存都是文件 (我乱讲的). 爬一个网页就存一个对应 id 命名的 html. 解析出一个 info, 就存一个相应的 json. 用的时候再用 fs.exist(xxx)
来判断是否存在缓存...
这东西吧, 能用也是能用, 多少还是有点丑. 当时的缓存文件夹长的像下面这样:
/cache├─html // 存放抓取的原始 html 数据│ ├─id│ │ 1102870.html│ │ 1102871.html│ │ 27012117.html│ ││ └─isbn│ 9780613130462.html│ 9787208140400.html│ 9787506323864.html│├─info // 存放解析后的数据│ ├─id // 图书 json 数据│ │ 1102870.json│ │ 1102871.json│ │ 35489958.json│ ││ └─isbn // isbn --> douban id 对应关系│ 9780613130462.txt│ 9787506325296.txt│ 9787506325297.txt│└─search // 搜索记录 json 数据刘慈欣.json超新星纪元.json骆驼.json
太奇怪了. 存了很多乱七八糟的东西. 所以第二版改用 sqlite3 了.
别的也没有什么好介绍的, 就一个简单的爬虫而已. 之后想到什么再补充在这里吧.
Version | Action | Time |
---|---|---|
1.0 | Init | 2022-05-19 23:36:11 |