V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
zhangolve
V2EX  ›  分享创造

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

  •  
  •   zhangolve · 2017-01-10 21:49:37 +08:00 · 3024 次点击
    这是一个创建于 2875 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目地址: 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 爬虫的一个小作品,目前实现的功能还比较简单,可扩展性还很高。

    15 条回复    2017-01-14 21:03:47 +08:00
    SpicyCat
        1
    SpicyCat  
       2017-01-10 22:10:27 +08:00   ❤️ 1
    支持一下。
    zhangolve
        2
    zhangolve  
    OP
       2017-01-10 22:35:50 +08:00
    @SpicyCat 要能 star 一下,就更感谢了。当然,绝不强求。。
    q99103248
        3
    q99103248  
       2017-01-10 23:29:11 +08:00
    先 star 再说
    Abigale
        4
    Abigale  
       2017-01-11 10:54:02 +08:00
    厉害,先 follow 了。
    zhangolve
        5
    zhangolve  
    OP
       2017-01-11 11:30:58 +08:00
    @Abigale 以更新对图片的支持。原来只能文字,现在可以加载图片了。
    moxiaonai
        6
    moxiaonai  
       2017-01-11 13:49:48 +08:00
    不错 star+1
    Maic
        7
    Maic  
       2017-01-12 12:27:58 +08:00 via iPhone
    你那个 50 咋来的?
    zhangolve
        8
    zhangolve  
    OP
       2017-01-12 12:44:38 +08:00 via Android
    @Maic 你应该看了源码吧,每次调用产生 20 个答案数据,产生一个 json 文件, 50 的话,也就是产生 1000 个答案,这是最多的。也就是说如果你有 300 个答案,实际上还是会产生 50 个 json 文件,其中有 35 个没有答案数据。如果你有 1200 个答案,嗯我用张佳玮的知乎答案做过测试,他有超过 1000 条答案,但只保存下了最近的 1000 条。
    这一块为了省事做得比较简单,普通人应该不会有超过 1000 个答案,当然,也确实可以再改进。也欢迎你去 github 项目里提 issue.
    Maic
        9
    Maic  
       2017-01-12 12:52:08 +08:00 via iPhone
    @zhangolve 不能以网页数据作为驱动吗,要自己写死在源码里?
    zhangolve
        10
    zhangolve  
    OP
       2017-01-12 14:36:05 +08:00
    @Maic 已经修改过了,当时也是觉得自己够用就行了,然后就图省事了。
    spice630
        11
    spice630  
       2017-01-12 23:05:46 +08:00
    登录之后的 就很简单了。。
    zhangolve
        12
    zhangolve  
    OP
       2017-01-12 23:55:43 +08:00 via Android
    @spice630 是这样,然后就是处理数据了。
    Antidictator
        13
    Antidictator  
       2017-01-13 21:01:10 +08:00 via Android
    cookie 那些一直 commit 上去真的好吗
    zhangolve
        14
    zhangolve  
    OP
       2017-01-14 14:03:25 +08:00 via Android
    @Antidictator config.example.js 里面的 cookie 不是真的。
    Antidictator
        15
    Antidictator  
       2017-01-14 21:03:47 +08:00 via Android
    @zhangolve 哦哦
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4964 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 04:00 · PVG 12:00 · LAX 20:00 · JFK 23:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.