写了个 node 爬虫,把自己的知乎答案,以 hexo 博客 markdown 形式备份到本地

2017-01-10 21:49:37 +08:00
 zhangolve

项目地址: https://github.com/zhangolve/zhihu-answer-convert-to-md-by-node

使用场景

不知道你是否像我一样,有一个基于 hexo 的博客,同时还在知乎上比较活跃,有一些自己的答案。如果是,可以继续看下去了,这个小工具是可以将你的知乎答案以 hexo 博客模板的 md 文件形式备份到本地,方便了你对你自己知乎答案的利用,避免了重复的复制粘贴。

使用方法

1 下载依赖

git clone https://github.com/zhangolve/zhihu-answer-convert-to-md-by-node 

进入 zhihu-answer-convert-to-md-by-node 文件夹内,

npm install 

2 修改配置文件

将 config.example.js 文件重命名为 config.js ,也就是去掉中间的.example ,打开重命名后的 config.js 文件,修改配置。

首先得到 cookie ,方法是:

打开已经登录的知乎,在 Chrome 控制台输入

document.cookie

将得到的字符串粘贴到对应的位置。

zhihuId 为你想要的知乎用户的知乎 Id ,由于这个项目是为了得到自己的知乎答案方便导出到 hexo 博客或其他用处,因此,建议填写自己的知乎 Id ,找知乎 id 的方法是找到自己的知乎主页,比如我的知乎主页是:

https://www.zhihu.com/people/zhang-hai-26/activities

则我的知乎 Id 就是 zhang-hai-26,将它复制粘贴到对应的位置即可。

至于 authorization 的获取,方法是使用 Chrome 浏览器,打开你的知乎主页,比如我的知乎主页是: https://www.zhihu.com/people/zhang-hai-26/activities ,然后按 F12 或者右键选择检查,切换到 Network (网络)标签,刷新页面,这个时候选择一个 activity 或者 answer 开头的文件,点击它,然后将右面 Request headers 里面的 authorization 对应的字符串复制下来。粘贴到 config.js 对应的位置。

3 下载

执行

npm start

如果 config.js 的配置没有问题的话,那么执行该脚本之后将会在接下来的一分钟以内,下载最多最近的 1000 个答案,如果您的知乎答案少于 1000 个,将下载到您的所有答案。

可以怎样用

如果你已经完成了 md 文件的写入,这个时候,你会在项目文件夹下得到两个目录,一个是以你的知乎 Id 命名的文件夹,用于存放最原始的答案 json 数据,另外一个文件夹则是用来存放 md 文件的,打开它之后我们就能够看到所有的答案了。

他们的规范都是 hexo 博客规范,因此可以直接将你想要放到博客中的文件放到博客文章目录之下,也可以对生成的 markdown 文件进行再编辑,也可以向我一样,把整个生成的 markdown 文件夹放到博客的一个子目录下,总之,材料就在那里,怎样用其实很灵活。

实际效果

可以看我的博客: http://hktkdy.com/categories/%E7%9F%A5%E4%B9%8E/

我的博客的知乎 category 里面放的就是我用爬虫爬到的所有答案,实际情况是,对文字支持较理想,对图片资源的利用目前还没解决,致使目前所有文章都属于无图状态,因此不建议答案中含有多图的答主使用该工具。

其他

这个小项目是我练习 node 爬虫的一个小作品,目前实现的功能还比较简单,可扩展性还很高。

3059 次点击
所在节点    分享创造
15 条回复
SpicyCat
2017-01-10 22:10:27 +08:00
支持一下。
zhangolve
2017-01-10 22:35:50 +08:00
@SpicyCat 要能 star 一下,就更感谢了。当然,绝不强求。。
q99103248
2017-01-10 23:29:11 +08:00
先 star 再说
Abigale
2017-01-11 10:54:02 +08:00
厉害,先 follow 了。
zhangolve
2017-01-11 11:30:58 +08:00
@Abigale 以更新对图片的支持。原来只能文字,现在可以加载图片了。
moxiaonai
2017-01-11 13:49:48 +08:00
不错 star+1
Maic
2017-01-12 12:27:58 +08:00
你那个 50 咋来的?
zhangolve
2017-01-12 12:44:38 +08:00
@Maic 你应该看了源码吧,每次调用产生 20 个答案数据,产生一个 json 文件, 50 的话,也就是产生 1000 个答案,这是最多的。也就是说如果你有 300 个答案,实际上还是会产生 50 个 json 文件,其中有 35 个没有答案数据。如果你有 1200 个答案,嗯我用张佳玮的知乎答案做过测试,他有超过 1000 条答案,但只保存下了最近的 1000 条。
这一块为了省事做得比较简单,普通人应该不会有超过 1000 个答案,当然,也确实可以再改进。也欢迎你去 github 项目里提 issue.
Maic
2017-01-12 12:52:08 +08:00
@zhangolve 不能以网页数据作为驱动吗,要自己写死在源码里?
zhangolve
2017-01-12 14:36:05 +08:00
@Maic 已经修改过了,当时也是觉得自己够用就行了,然后就图省事了。
spice630
2017-01-12 23:05:46 +08:00
登录之后的 就很简单了。。
zhangolve
2017-01-12 23:55:43 +08:00
@spice630 是这样,然后就是处理数据了。
Antidictator
2017-01-13 21:01:10 +08:00
cookie 那些一直 commit 上去真的好吗
zhangolve
2017-01-14 14:03:25 +08:00
@Antidictator config.example.js 里面的 cookie 不是真的。
Antidictator
2017-01-14 21:03:47 +08:00
@zhangolve 哦哦

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/333711

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX