某天我之前的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机构,

    魔改后可用

  2. 缺少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
  3. 爬取得到的markdown文本格式不是很理想

    这个问题并没有解决

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

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


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

迁移脚本在这里csdn2hexo

评论