这两天抽空把简书的文章都迁移到了自己的博客中,这里小记一下。首先说明我这里的配置环境:
本地安装好 hexo 配套环境 
阿里云服 Ubuntu 服务器中安装 git 和 nginx 
 
简单配置 原来是利用 github + hexo 来搭建自己的博客的,后来折腾了一下 wordpress,恩,感觉的确是够折腾的,还是改回 hexo 好了。在准备改回来的时候,我转念一想,github 也就是作为一个 git 仓库,那么我能否利用自己的服务器来作为静态页面的容器呢?说干就干,试了一下果然可以。首先在服务器建立一个 git 仓库(这里省略本地和服务器环境配置的过程):
1 2 #  mkdir ~/blog #  git init --bare ~/blog/hexo.git 
 
之后配置钩子,在每次收到 post 后将文件更新到 nginx 的资源目录下,钩子在 git 目录的 hooks 目录下:
1 2 #  cd  ~/blog/hexo.git/hooks #  vim post-receive 
 
 
之后输入以下内容:
1 2 3 # !/bin/bash git --work-tree=/var/www/hexo --git-dir=/home/xiasuhuei321/blog/hexo.git checkout -f 
 
这里 var/www/hexo 是我服务器中创建的资源存放位置,这里根据各位自己的实际情况来操作。之后wq退出vim保存,到这里,服务器的配置就基本完成了,还是比较简单的。
本地配置也比较简单,利用 hexo 命令创建一个本地目录:
1 2 3 4 $  mkdir ~/Desktop/blog $  cd  ~/Desktop/blog $  hexo init $  npm install 
 
由于每次生成静态界面和发布都需要输入hexo g,hexo d这两个命令,可以写一个 shell 脚本。
 
输入以下命令:
1 2 3 # !/bin/bash hexo g hexo d 
 
这里需要修改一下 hexo 的配置文件,找到目录下的_config.yml,找到以下内容并填入自己的配置:
1 2 3 4 deploy:   type:  git    repo:  xiasuhuei321@你的服务器ip:/home/xiasuhuei321/blog/hexo.git    branch:  master  
 
这里要注意yml对格式的要求比较严格,缩进和冒号后的空格不能有错,保存修改后执行之前编写的post.sh脚本:
 
到这里,如果你的操作都正确,这个时候去访问你的服务器ip,是会看到hexo生成的那篇默认文章的。接下来就是迁移简书的文章了。
迁移简书文章 迁移简书文章还是比较简单的,进入设置里面,可以打包下载自己所有的文章,包括草稿,不过那个创作时间可不包括在文章里面,是简书自己记录的,hexo 在头部是可以加上创作时间的。我个人对于这个也是比较在乎的,所以写了个小脚本来自动为文章的md文件加上这段头。hexo这段头的格式是这样的:
1 2 3 4 5 --- title: Python入手(二) date: 2017-10-31 00:52:20 --- 
 
这里想要拿到时间,进主页观察一下布局: 利用 chrome 自带的工具分析起来很方便,这里用 python 的requests 和 BeatifulSoup 库来请求和解析 html。当然,我这里并没有选择用主页的 url 来解析,而是选择了自己当初创建的分类,而自己打包下载文章实际上也是根据这种分类来的。需要注意的是,如果你的文章标题里有空格,文件名里会自动转成 - ,我在这里小小的吃了个亏。还有一点要注意的就是请求访问请求文章的时候一次只会返回九篇,如果超过九篇,则需要额外的请求
类似于图上的这种,我这里只有两个分类超过了九篇,而且我写的脚本也不是全自动的,需要自己手填 url ,所以明白了这一点之后就很简单了,脚本如下,各位可以根据自己的需要改:
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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 from  bs4 import  BeautifulSoupimport  requestsarticlePath = "/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" ) 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' ) 
 
这里因为自己用啥的,所以变量啥的命名都比较随意