python+shell 备份 CSDN 博客文章,CSDN博客备份工具

在 csdn 写了几年的博客了。多少也积累了两三百篇博文,近日,想把自己的这些文章全部备份下来,于是开始寻找解决方案。

我找到了一个同为 CSDN 博主写的 python 脚本工具,尝试了一下,发现因为网站改版的原因,原先的脚本已经不能运行了。

其实,这是想要一揽子解决问题的脚本的通病,当一处变化,整个脚本就要作废。所以,我决定自己来解决这个问题,并且这个解决问题的方案,不会因为官方的改版就不能使用,只要稍微修改一下代码,即可。

分析备份文章的步骤

将一个大的问题,拆成若干个小的问题,即可轻松解决问题。

  1. csdn 的每篇博文都有独立的 ID
    因此,我们需要把所有的 ID 都找出来。
  2. csdn 肯定有接口,展示我们的 markdown 格式的文本
    因为我们每次打开编辑器的时候,文本都会被渲染出来,所以肯定有接口。
    就算没有接口,我们通过浏览器能访问到我们的文章,我们就一定有办法保存下来。
    不过 csdn 有,所以没有尝试了。呵呵。
  3. 通过 ID 和接口,把文本全部读取出来,并保存到本地。

好,大概就是这个流程。

搞到所有文章的ID

这个会有很多种方法,我直接通过爬取我的博客首页,来拿到所有的文章 ID。分析一下我的博客的首页列表,我们可以看到这样的 url 格式 https://blog.csdn.net/fungleo/article/list/2。而我的博文有 14 页,所以,很容易猜测到我的博客问的所有列表。

循环一个 14 的数字即可。你有多少,就循环多少咯。然后我们分析一下源码:

如上,我们的 ID 在一个名为 text-truncateh4 标签中的 a 链接的结尾。通过 BeautifulSoup 这个 python 爬虫工具,我们可以非常轻松的拿到这个值。

于是,我写出了下面的脚本:

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import  urllib.request
from bs4 import BeautifulSoup
import osdef getid (x):url = r'https://blog.csdn.net/fungleo/article/list/' + str(x)res = urllib.request.urlopen(url)html = res.read().decode('utf-8')soup = BeautifulSoup(html,'html.parser')links = soup.find_all('h4', 'text-truncate')for i in links:os.system('echo ' + str(i.a['href']).replace('https://blog.csdn.net/fungleo/article/details/', '') + ' >> id.txt')for i in range(14):getid(i)

好,现在,我们所有的博客文章的 ID 都已经存在了 id.txt 这个文件夹下面了。

这里,我用了 python 执行 shell 脚本的方式写入文件。确实,shell 实在太方便了。

下载博客文章的所有的 json 数据

我通过分析博客的编辑器,顺利找到了一个接口,其结果如下:

这个接口,实在是太完美了。下面,我就要把这些全部下载下来。

首先,我们先拿到 curl 的请求数据,在 chrome 浏览器中这样操作:

然后将复制到的内容,直接在终端内运行,果然能够拿到数据。这就好了,下面一个 shell 脚本循环,下载所有的 json 到本地。

首先,我们将浏览器用上面的操作复制出来的内容保存为一个 t.sh 的脚本文件,修改其中的 id$1

curl 'https://mp.csdn.net/mdeditor/getArticle?id=$1' -H 'Cookie: __这里的代码我删除掉了。__' --compressed

然后,我们在命令行输入以下命令直接运行:

for i in $(cat id.txt); do sh t.sh $i > $i.json; sleep 1; done

好,经过数分钟的运行之后,我们的所有 JSON 数据就都已经保存到本地了。

至于这里为什么要用 shell 是因为它是在是太方便了。简单一句代码,就搞定所有问题。

将 json 数据读取,并保存成 markdown 格式的博文

通过两步,我们就已经拿到了数据了,下面要进行的就是数据的处理,这个 shell 就不方便了,我们继续用 python 脚本来解决问题。

我刚刚下载的时候,把 json 文件和我们的脚本放在一起了。我要规整一下,执行下面的几条命令:

mkdir json markdown
mv *.json json

好,下面我们要把 json 文件夹中的所有数据读取,转换为 markdown 格式,并保存到 markdown 文件夹中。

脚本如下:

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import os
import jsonsourceDir = './json'def readJson (filPath):f = open(filPath, encoding='utf-8')data = json.load(f)title = data['data']['title'].replace('/', ':')content = data['data']['markdowncontent']tags = data['data']['tags'].split(',')if content:mdFile = open('''./markdown/{title}.md'''.format(title=title), 'a+')mdFile.write('title: ' + title + '\n')mdFile.write('date: 2018-06-29 00:00:00 +0800\n')mdFile.write('update: 2018-06-29 00:00:00 +0800\n')mdFile.write('author: fungleo\n')mdFile.write('tags:\n')for tag in tags:mdFile.write('    -' + tag + '\n')mdFile.write('---\n\n')mdFile.write(content)def findJson ():for fil in os.listdir(sourceDir):filPath = os.path.join(sourceDir, fil)readJson(filPath)findJson()

嗯,我给每个博客都添加了一点元信息,不知道标准不标准,呵呵。

好,通过上面的几步,我就已经给所有的博客文章都备份到本地了。下面我想把所有的图片再全部备份出来,抽时间搞一下。

本文所有脚本均是在 mac 下运行的。linux 下可能略有差异,请注意。windows 下我不知道如何运行,不过可以搞一个云服务器或者虚拟机来跑,都是没有问题的。

本文由 FungLeo 原创,允许转载,但转载必须保留首发链接。

python+shell 备份 CSDN 博客文章,CSDN博客备份工具相关推荐

  1. 如何增加自己的文章在csdn的曝光量-参考CSDN博主排名更新公告

    前言 不知不觉已经在CSDN上3年,但是本人也是刚刚在CSDN上创作文章,成为博主没几天,我看了这几天文章的浏览数据不尽人意,时常开始反思是不是自己的文章不够好.毕竟都是理工科出身,文采水平有限,但是 ...

  2. 使用IntelliJ IDEA开发SpringMVC网站(五)博客文章管理

    原文:使用IntelliJ IDEA开发SpringMVC网站(五)博客文章管理 摘要 通过对博客文章的管理,实现外键操作. 目录[-] 八.博客文章管理 1.查看文章 2.添加博客        3 ...

  3. 博客 SEO:优化 SEO 博客文章的 47 个专业技巧

    我们多次被要求分享我们如何优化博客文章fget或SEO并获得更好的搜索排名,所以我们在这里. 我们不仅将分享部分优化过程,而且还要求 100 多名 SEO 和营销人员分享他们的博客文章的 SEO 最佳 ...

  4. 使用Python爬取CSDN历史博客文章列表,并生成目录

    使用Python爬取CSDN历史博客文章列表,并生成目录 这篇博客将介绍如何使用Python爬取CSDN历史博客文章列表,并生成目录. 2020年 2020年04月 cv2.threshold() 阈 ...

  5. python使用BeautifulSoup获取csdn单个博客文章字数

      之前一直想统计每年博客大致写了多少字数,但是csdn中好像只有文章数统计,没有字数统计(或者是一直没有发现相关的功能).最近学习python的网络相关模块时,python关于网页读取及抓取网页内容 ...

  6. python统计csdn个人博客文章清单及字数

      为了统计csdn个人博客文章字数,之前已经学习并测试了获取文章字数.获取博客文章清单.python操作excel文件等内容,基本上可以拼凑起一个基本的统计程序.   合并之前三篇文章中的测试代码, ...

  7. Python爬虫入门实战1:获取CSDN个人博客文章目录及阅读量数据

    ☞ ░ 老猿Python博文目录:https://blog.csdn.net/LaoYuanPython/article/details/98245036 ░ 一.引言 有阵子博客的访问量出现了比较大 ...

  8. Python 爬虫自动访问点击刷CSDN博客文章阅读量

    一段小代码,可以帮助自动刷CSDN阅读量,感兴趣的朋友可以复制代码,然后把自己博客文章的URL修改一下就可以了,两个都修改之后可以使用了,帮助那些有需要的人 # 导入需要用到的库 import req ...

  9. 统计个人CSDN的博客文章数量

    统计个人CSDN的博客文章数量 第一版 原始版本比较简单 只能统计第一页,而且没有进行排序 # coding:utf-8 import urllib2 from bs4 import Beautifu ...

最新文章

  1. js表单提交,支持图片上传,包含后端php代码
  2. Chrome 插件:自己写的插件提示请停用以开发者模式运行的插件处理方法,该拓展程序未列在chrome网上应用商店中,并可能是在您不知情的情况下添加的解决办法
  3. Part2_3 正则表达式、Excel表格相关操作
  4. Springboot文件上传提示:failed to convert java.lang.String to org.springframework.util.unit.DataSize
  5. java 异常 规范_java 异常规范
  6. 物联网安防技术融合在细分领域的应用分析
  7. 中科大博士写外挂被抓,非法牟利300多万!
  8. PHP获取字符串的所有子集,PHP Regexp(PCRE)-查找所有子字符串的集合
  9. Django JWT认证实现
  10. matlab绘制庞加莱截面_如何用mathematica或Matlab画弹性摆的庞加莱截面
  11. GPU配置与使用策略
  12. 没事学学docker(三):配置阿里云镜像加速以及解决docker起不来的问题
  13. GAN造图MINST手写数字
  14. redies用途和使用场景
  15. Linux下好用的类似QQ截图工具
  16. Android性能优化之利用LeakCanary检测内存泄漏及解决办法
  17. 轻松搞懂Linux中程序、进程、服务的区别及操作命令
  18. CSS实现文字环绕图片效果
  19. 巴特沃斯(Butterworth)滤波器 (1)
  20. Hive执行报错CannotObtainBlockLengthException: Cannot obtain block length for LocatedBlock

热门文章

  1. 寒风冷雨,东湖吹风记
  2. 计算机的发展史英语作文,求一篇关于计算机发展史的英语作文
  3. soar SQL分析工具与soar-web可视化
  4. Salesforce Admin篇(三) Delegated Administrator
  5. LINUX SHELL脚本攻略笔记[速查]
  6. VBA_话费明细单_格式调整
  7. python怎么实现自动化运维_如何做好python自动化运维
  8. NoSQL数据库概述
  9. vue【element ui】el-date-picker 日期选择器控件 限制可选的开始时间和结束时间
  10. 基于Django简单实现一个员工管理系统