|
|
|
|
公众号矩阵

一日一技:如果你非要把HTML到数据库,那么你应该…

在粉丝群里面,我多次强调爬虫不要把网页源代码存入数据库,但还是有很多同学这样做。源代码动辄几十 KB 甚至几 MB,存放到数据库里面会严重拖慢性能。

作者: kingname 来源:未闻Code|2021-11-20 05:00

在粉丝群里面,我多次强调爬虫不要把网页源代码存入数据库,但还是有很多同学这样做。源代码动辄几十 KB 甚至几 MB,存放到数据库里面会严重拖慢性能。

如果你非要储存源代码,那么你可以使用 Hive 或者对象储存来存放。

如果你被逼无奈,必须用数据库来存放,那么你至少应该对HTML 进行压缩。平时我们常常听说使用 winrar/7zip/tar 这些压缩工具来压缩文件或者文件夹,那么我们如何压缩字符串呢?

Python 自带了两种压缩方式:zlib和gzip。

我们先来看看我的博客首页有多大:

  1. import requests 
  2.  
  3. html = requests.get('https://www.kingname.info').text 
  4.  
  5. with open('kingname.html''w'as f: 
  6.  
  7. f.write(html) 

生成的kingname.html文件,有82KB,如下图所示:

现在,我们使用zlib来对 HTML 进行压缩,然后把压缩后的内容写到文件,我们来看看数据有多大:

  1. import zlib 
  2. import requests 
  3.  
  4. html = requests.get('https://www.kingname.info').text 
  5. html_compressed = zlib.compress(html.encode()) 
  6. with open('kingname_zlib''wb'as f: 
  7.     f.write(html_compressed) 

生成的文件大小只有16KB,如下图所示:

压缩以后体积变成了原来的五分之一,节约了大量的磁盘空间。需要注意的是,zlib.compress的输入参数是bytes型的数据,输出也是bytes型的数据。并且,输出的数据是不能解码成字符串的,所以在写文件的时候,必须使用wb方式写入。如果你用的 MySQL 的话,需要把字段的类型设置成blob。

要解压缩也非常简单,使用zlib.decompress就可以了:

  1. import zlib 
  2. with open('kingname_zlib''rb'as f: 
  3.     html_compressed = f.read() 
  4. html = zlib.decompress(html_compressed).decode() 

除了zlib外,我们还可以使用gzip这个自带的模块来压缩字符串。用法几乎一模一样:

  1. import gzip 
  2.  
  3. import requests 
  4.  
  5. html = requests.get('https://www.kingname.info').text 
  6.  
  7. html_compressed = gzip.compress(html.encode()) 
  8.  
  9. with open('kingname_gzip''wb'as f: 
  10.  
  11. f.write(html_compressed) 

压缩以后,文件大小也是16KB:

在生产项目中,除了Python自带的这两个压缩模块,还有可能会使用Snappy进行压缩。他的压缩速度非常快,比zlib和gzip都快。压缩率也很高。但安装起来比较麻烦,首先需要安装Snappy程序,然后再安装python-snappy库才能使用。有兴趣的同学可以搜索了解一下。

总结:强烈不建议使用数据库来存放网页整个源代码。如果非要使用,要压缩以后再存。

【编辑推荐】

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区
  2. Oracle认证数据库管理员实战视频课程(OCP,052)
  3. 微软MVP带你零基础学习Access数据库
  4. 成人视频网站StripChat数据库泄漏,模特信息“一览无余”
  5. 数据库技术创新保障数据安全
  6. mysql数据库基础技能全程实战
【责任编辑:武晓燕 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

带你轻松入门 RabbitMQ

带你轻松入门 RabbitMQ

轻松入门RabbitMQ
共4章 | loong576

57人订阅学习

数据湖与数据仓库的分析实践攻略

数据湖与数据仓库的分析实践攻略

助力现代化数据管理:数据湖与数据仓库的分析实践攻略
共3章 | 创世达人

14人订阅学习

云原生架构实践

云原生架构实践

新技术引领移动互联网进入急速赛道
共3章 | KaliArch

42人订阅学习

视频课程+更多

强哥带你学习docker

强哥带你学习docker

讲师:周玉强27435人学习过

OCP培训 Oracle 12c/18c/19c/2019 OCP认证培训实战教程【会员2折秒杀】

OCP培训 Oracle 12c/18c/19c/2019 OCP认证培

讲师:风哥56653人学习过

Java代码审计系列课程

Java代码审计系列课程

讲师:Hack_Man2184人学习过

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微