将文章从简书迁移到 Hexo

这两天抽空把简书的文章都迁移到了自己的博客中,这里小记一下。首先说明我这里的配置环境:

  • 本地安装好 hexo 配套环境
  • 阿里云服 Ubuntu 服务器中安装 git 和 nginx

简单配置

原来是利用 github + hexo 来搭建自己的博客的,后来折腾了一下 wordpress,恩,感觉的确是够折腾的,还是改回 hexo 好了。在准备改回来的时候,我转念一想,github 也就是作为一个 git 仓库,那么我能否利用自己的服务器来作为静态页面的容器呢?说干就干,试了一下果然可以。首先在服务器建立一个 git 仓库(这里省略本地和服务器环境配置的过程):

# mkdir ~/blog
# git init --bare ~/blog/hexo.git

之后配置钩子,在每次收到 post 后将文件更新到 nginx 的资源目录下,钩子在 git 目录的 hooks 目录下:

# cd ~/blog/hexo.git/hooks
# vim post-receive

之后输入以下内容:

#!/bin/bash

git --work-tree=/var/www/hexo --git-dir=/home/xiasuhuei321/blog/hexo.git checkout -f

这里 var/www/hexo 是我服务器中创建的资源存放位置,这里根据各位自己的实际情况来操作。之后wq退出vim保存,到这里,服务器的配置就基本完成了,还是比较简单的。

本地配置也比较简单,利用 hexo 命令创建一个本地目录:

$ mkdir ~/Desktop/blog
$ cd ~/Desktop/blog
$ hexo init
$ npm install

由于每次生成静态界面和发布都需要输入hexo g,hexo d这两个命令,可以写一个 shell 脚本。

$ vim post.sh

输入以下命令:

#!/bin/bash
hexo g
hexo d

这里需要修改一下 hexo 的配置文件,找到目录下的_config.yml,找到以下内容并填入自己的配置:

deploy:
  type: git
  repo: xiasuhuei321@你的服务器ip:/home/xiasuhuei321/blog/hexo.git
  branch: master

这里要注意yml对格式的要求比较严格,缩进和冒号后的空格不能有错,保存修改后执行之前编写的post.sh脚本:

$ ./post.sh

到这里,如果你的操作都正确,这个时候去访问你的服务器ip,是会看到hexo生成的那篇默认文章的。接下来就是迁移简书的文章了。

迁移简书文章

迁移简书文章还是比较简单的,进入设置里面,可以打包下载自己所有的文章,包括草稿,不过那个创作时间可不包括在文章里面,是简书自己记录的,hexo 在头部是可以加上创作时间的。我个人对于这个也是比较在乎的,所以写了个小脚本来自动为文章的md文件加上这段头。hexo这段头的格式是这样的:

---
title: Python入手(二)
date: 2017-10-31 00:52:20

---

这里想要拿到时间,进主页观察一下布局:
时间
利用 chrome 自带的工具分析起来很方便,这里用 python 的requests 和 BeautifulSoup 库来请求和解析 html。当然,我这里并没有选择用主页的 url 来解析,而是选择了自己当初创建的分类,而自己打包下载文章实际上也是根据这种分类来的。需要注意的是,如果你的文章标题里有空格,文件名里会自动转成 - ,我在这里小小的吃了个亏。还有一点要注意的就是请求访问请求文章的时候一次只会返回九篇,如果超过九篇,则需要额外的请求
需要额外请求

类似于图上的这种,我这里只有两个分类超过了九篇,而且我写的脚本也不是全自动的,需要自己手填 url ,所以明白了这一点之后就很简单了,脚本如下,各位可以根据自己的需要改:

# -*- coding: UTF-8 -*-
from bs4 import BeautifulSoup
import requests

articlePath = "/Users/luojun/Desktop/笔记/user-1976147-1527572719/Android学习笔记"
url = "https://www.jianshu.com/nb/4067642?order_by=added_at&page=4"
mdStr = '---\n' \
        'title:\n' \
        'date:\n' \
        '---\n'

headers = {"Accept": "text/html,application/xhtml+xml,application/xml;",
           "Accept-Encoding": "gzip",
           "Accept-Language": "zh-CN,zh;q=0.8",
           "Referer": "http://www.example.com/",
           "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.170 Safari/537.36"}

resp = requests.get(url, headers=headers)
bs = BeautifulSoup(resp.text, "html.parser")


# print(resp.text)

def handleArticle(str, title):
    with open(articlePath + '/' + title + '.md', 'r+') as f:
        i = 0
        s = ''
        specStart = False
        while i < 9:
            t = f.readline()
            if t.startswith('```'):
                s += '<!--more-->\n' + t
                specStart = True
                break
            s += t
            i += 1
        leftS = f.read()
        f.seek(0)
        f.write(str)
        f.write(s)
        if not specStart:
            f.write('<!--more-->\n')
        f.write(leftS)


# 获取文章列表模块
container = bs.find('div', {'id': 'list-container'})
# 获取标题和时间
for item in container.find_all('li'):
    title = item.find('a', {'class': 'title'}).get_text()
    print(title)
    time = item.find('span', {'class': 'time'})['data-shared-at']
    time2 = time.replace('T', ' ')
    time3 = time2.split('+')[0].lstrip(' ')
    mdStr2 = mdStr.replace('title:', 'title: ' + title)
    mdStr3 = mdStr2.replace('date:', 'date: ' + time3)
    handleArticle(mdStr3, title)
    print(mdStr3)
    print('finish\n')

这里因为自己用啥的,所以变量啥的命名都比较随意~

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值