csdn总是在公司打不开,上面的博客不更新了又舍不得扔,便想着迁过来。

大致思路:

  1. csdn里的博客都不能直接导出成md格式的
  2. hexo的博客是解析markdowwn的
  3. 抓取网页html结构 -> md格式

工具:

  1. 说到网页抓取工具,首先想到的是phantomJs, 还有一个casperjs, 后者是在前者的基础上包装了一层,使用起来更方便。
    这两个工具使用起来都是与node相似,但是它们又是有自己的环境,独立于node的,基于node的包不可以直接在它们中使用
    另外,casperjs又是依赖于phantomJs的,也就是说安装casperjs要先安装phantomJs
    不得不吐槽的是,在环windows上装casperjs太费劲了,各种配环境变量,装python2.7 啥的都不好使,装了2天都没成功,mac上一下就成功了

  2. 因为在markdown中,有效的标签只有那么几种,而直接抓取下来的网页中标签很杂,因此需要过滤保留几种标签。
    可以用正则来匹配,但是考虑到嵌套标签,以及里面标签的不可预知性(说白了就是想偷懒),找了一个防xss的node包,js-xss, 这个插件里可以指定只保留哪些标签

  3. 最后就是用to-markdwon, 这个包来生成最后md格式的文件

  4. 由于casperjs的环境和node的环境是独立的,显然这是一个两步走的流程,但是可以使用node中exec方法var exec = require('child_process').exec;,来执行命令行命令,这样就把两者结合起来了

问题:
毕竟这是工具生成的,再最终的文件中,还是有些地方不那么完美,需要手动再次调整下,但是比起来一个个的粘贴复制,工作量还是小不少。主要问题体现在:

  1. 代码的格式,乱七八糟。。csdn自身展示代码的插件会在有代码的地方生成一些乱七八糟的dom结果
  2. 对md中的关键字符,没有转义,比如星号等
  3. 图片无法抓取保存

结果
CSDN旧博客

附件
抓取网页的js
toMarkdown