某天我之前的hexo主题被自己玩坏了, 决定换一个主题,

同时突然想把之前CSDN博文迁移进来,CSDN这个网站是越来越傻逼了.

最终选择了hexo-theme-matery主题,

但最艰难的博文迁移过程算是完成了,但仍然有很大瑕疵…


之前迁移的版本瑕疵很大,挑了个时间重新爬了一遍, 这次的思路是登录后爬取CSDNMarkdown原文。

HEXO更换主题,并配置

有了easyHexo这个项目做起来还是很容易的,里面很详细的介绍了hexo博客的构建部署及主题使用以及配置.

我这里就不在赘述了,只说几个坑吧.

代码高亮问题

我采用的 hexo-prism-plugin 是一个代码高亮的插件,但是对c++代码的编写是必须为cpp 不能为 c++.

渲染问题

之前的文件中存在} }这样的字符,hexo渲染的时候就会出现报错

1
2
3
FATAL Something's wrong. Maybe you can find the solution here: http://hexo.io/docs/troubleshooting.html
Template render error: (unknown path) [Line 31, Column 21]
expected variable end

参考了文章一,文章二 找到问题并解决

CSDN博文迁移

以下是的迁移方法。 这次的思路是登录后爬取CSDNMarkdown原文。

其实没啥好说的, 用这个代码就可以了。

爬虫代码

需要注意的是 我爬取的时候发现这个编辑页的链接在变, 这里可能要F12找下最新的。

**https://blog-console-api.csdn.net/v1/editor/getArticle?id={blog_id}**


以下是的迁移方法。

我这里有300+篇博文在csdn上,所以很难人工迁移,所以选择python爬虫的方式爬取迁移,

百度一通找了好多爬虫,不是太老了,就是效果不行,

最终我找到了一个能凑合用的脚本,csdn-blog-export

它能够自动爬取博文,并输出markdown文本或者html的代码,

但是年代还是过于老了, CSDN的网站html结构已经大变,于是进行了魔改,终于可以爬取到信息了,

期间主要是有几个问题

  1. 不适应新的网站html机构,
>   魔改后可用
  1. 缺少hexo需要的yaml front matter,
>   添加此函数 获得`yaml front matter`
>
>
>
>   
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
def getHexoTitleMarkdown(self, detail):
title = '<' + \
html2text.html2text(detail.find(class_='article-title-box').span.prettify()).rstrip('\n') + \
'>' + \
html2text.html2text(detail.find(class_='title-article').prettify()).rstrip('\n')
date = html2text.html2text(detail.find(class_='time').prettify()).replace('\n', '')
date = date[:4] + '-' + date[5:7] + '-' + date[8:10] + ' ' + date[-8:]
tags = detail.find_all(class_='tag-link')
tags = map(deleteURL, map(lambda x: x.replace('\n', ''), map(html2text.html2text, map(lambda x: x.prettify(), tags))))
# print(tags)
tags = ''.join(map(lambda x: ' - ' + x + '\n', map(lambda x: x.replace('=', '').strip(), tags)))
str = u'''---
title: %s
date: %s
description:
toc: true
author: tabris
# 图片推荐使用图床(腾讯云、七牛云、又拍云等)来做图片的路径.如:http://xxx.com/xxx.jpg
img:
# 如果top值为true,则会是首页推荐文章
top: false
# 如果要对文章设置阅读验证密码的话,就可以在设置password的值,该值必须是用SHA256加密后的密码,防止被他人识破
password:
# 本文章是否开启mathjax,且需要在主题的_config.yml文件中也需要开启才行
mathjax: false
summary: 这是你自定义的文章摘要内容,如果这个属性有值,文章卡片摘要就显示这段文字,否则程序会自动截取文章的部分内容作为摘要
categories: OJ算法题
tags:
%s
---

''' % (title.replace('\n', '').replace(':', ' '), date.replace(':', ' '), tags.replace(':', ' '))
# print(str)
# exit(0)
return str
  1. 爬取得到的markdown文本格式不是很理想

    这个问题并没有解决

    最开始查看了这个脚本使用的htmlmarkdown模块(html2text)最后一次维护是2012年,

    于是就换了一个新模块html2markdown,可最后发现这个模块的效果还不如html2text, 于是放弃.


最终迁移到了https://blog.tabris.top/categories/OJ算法题/,

迁移脚本在这里csdn2hexo