前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一日一技:如果你非要把HTML存到数据库,那么你应该…

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

作者头像
青南
发布2021-12-01 18:59:19
4800
发布2021-12-01 18:59:19
举报
文章被收录于专栏:未闻Code未闻Code未闻Code

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

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

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

Python 自带了两种压缩方式:zlibgzip

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

import requests

html = requests.get('https://www.kingname.info').text

with open('kingname.html', 'w') as f:
    f.write(html)

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

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

import zlib
import requests

html = requests.get('https://www.kingname.info').text
html_compressed = zlib.compress(html.encode())
with open('kingname_zlib', 'wb') as f:
    f.write(html_compressed)

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

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

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

import zlib
with open('kingname_zlib', 'rb') as f:
    html_compressed = f.read()
html = zlib.decompress(html_compressed).decode()

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

import gzip
import requests

html = requests.get('https://www.kingname.info').text
html_compressed = gzip.compress(html.encode())
with open('kingname_gzip', 'wb') as f:
    f.write(html_compressed)

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

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-11-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 未闻Code 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档