> 文档中心 > 阮一峰老师博客爬取与博客文章存储持久化方式的思考

阮一峰老师博客爬取与博客文章存储持久化方式的思考

阮一峰老师博客爬取与博客文章存储持久化方式的思考

  • 前言
  • 博客文章存储持久化思考
    • 文本形式存储
    • html形式存储
    • pdf形式存储
  • 博客爬取思路
    • 爬取思路一
    • 爬取思路二
    • 个人选择
    • pdf存储
  • 结尾

前言

以前阅读过阮一峰老师的博客,讲解通俗易懂,很是良心,想着把老师的博客都爬取下来,方便后面阅读。由于是第一次爬取并存储博客数据,如何永久储存博客是我需要思考的问题,而下来便是我自己总结的思路了。

博客文章存储持久化思考

文本形式存储

文本形式存储是指将数据储存在文本文件中,这种方式确实能直接、快捷储存文字数据,但是文本形式存储无法保存含有图片的博文,同时也无法保留文字格式存储,这样在阅读体验上会很差。

html形式存储

html形式存储是指将数据保存在html格式文件中,它把爬取到的网页源码保存到html文件中,在保存时单独下载博客中的图片到本地,并替换网页源码中图片的路径为本地图片的路径,这样打开html时能阅读到文字与图片,相对文本形式存储在体验上会好很多,但是除非一并下载css、js样式文件,不然本地打开的博文还是会乱序。

pdf形式存储

pdf形式存储是指将数据保存成pdf文件格式,当然,如果单纯得爬取并添加数据效果不会很好,所以需要依赖python第三方库pdfkit,它可以将字符串数据转换成pdf,而我们爬取到的网页源码字符串数据在转换时是能以网页原样式转换的,这样在文字顺序和图片上都能很好得还原博文本来的样貌。

博客爬取思路

网站:阮一峰网络日志
这个网站设计是不会展示全部的博文日志的,所以只能通过上下篇这种方式遍历到全部博文
在这里插入图片描述

爬取思路一

我们可以请求最新一期的博文,在保留这一期的博文数据时,拿到上一期的博文链接,在保存这一期的数据后请求上一期。以此类推不断爬取

爬取思路二

通过请求最新一期的博文拿到上一次的博文链接并保存链接,然后请求上期链接拿到上上期的网址,以此类推,第一次遍历只为了存储全部博文链接。待拿到全部链接后,循环遍历再次请求并保存数据即可

个人选择

我采用的是第二种爬取思路,因为第一遍得到全部链接后,我们可以通过多线程方式快速爬取到博文数据。

pdf存储

通过pip install pdfkit安装第三方库
还需wkhtmltopdf工具,下载路径,安装后要将wkhtmltopdf的bin目录添加到系统环境变量中

程序代码调用pdfkits时,pdfkit会调用wkhtmltopdf,通过wkhtmltopdf来调用windows中的wkhtmltopdf.exe来转化html为pdf。

pdfkit使用

options = {    'page-size': 'Letter',    'encoding': "UTF-8",    'custom-header': [('Accept-Encoding', 'gzip')]}filename = './article/{}.pdf'.format(article_title.group(1))path_wk = r'C:\wkhtmltopdf\bin\wkhtmltopdf.exe'  # 安装位置config = pdfkit.configuration(wkhtmltopdf=path_wk)pdfkit.from_string(resp.text, filename, options=options, configuration=config)

结尾

分享到此结束,本次分享仅作学习用途,有什么问题欢迎讨论。
源码下载

2020WEB前端记录