迁移CSDN博客
Oct 28, 2015
csdn总是在公司打不开,上面的博客不更新了又舍不得扔,便想着迁过来。
大致思路:
- csdn里的博客都不能直接导出成md格式的
- hexo的博客是解析markdowwn的
- 抓取网页html结构 -> md格式
工具:
说到网页抓取工具,首先想到的是phantomJs, 还有一个casperjs, 后者是在前者的基础上包装了一层,使用起来更方便。
这两个工具使用起来都是与node相似,但是它们又是有自己的环境,独立于node的,基于node的包不可以直接在它们中使用
另外,casperjs又是依赖于phantomJs的,也就是说安装casperjs要先安装phantomJs
不得不吐槽的是,在环windows上装casperjs太费劲了,各种配环境变量,装python2.7 啥的都不好使,装了2天都没成功,mac上一下就成功了因为在markdown中,有效的标签只有那么几种,而直接抓取下来的网页中标签很杂,因此需要过滤保留几种标签。
可以用正则来匹配,但是考虑到嵌套标签,以及里面标签的不可预知性(说白了就是想偷懒),找了一个防xss的node包,js-xss, 这个插件里可以指定只保留哪些标签最后就是用to-markdwon, 这个包来生成最后md格式的文件
由于casperjs的环境和node的环境是独立的,显然这是一个两步走的流程,但是可以使用node中exec方法
var exec = require('child_process').exec;
,来执行命令行命令,这样就把两者结合起来了
问题:
毕竟这是工具生成的,再最终的文件中,还是有些地方不那么完美,需要手动再次调整下,但是比起来一个个的粘贴复制,工作量还是小不少。主要问题体现在:
- 代码的格式,乱七八糟。。csdn自身展示代码的插件会在有代码的地方生成一些乱七八糟的dom结果
- 对md中的关键字符,没有转义,比如星号等
- 图片无法抓取保存
结果
CSDN旧博客