python - 如何在python爬虫中保存存储(常用字符串)
问题描述
我有一个 python3 爬虫,可以连接到目标站点并保存所有 html 和资源。虽然我在保存之前使用 gzip 压缩它会消耗太多空间,而且我通常会在不到一半的网站页面被抓取之前达到我配置的空间限制。
关键是同一网站的所有页面都有很多公共字符串(甚至有些网站在所有 html 页面中都包含诸如 css 之类的资源,而不是链接)。然后我的想法是为同一个网站保存公共字符串。我认为这种优化会被记录在案,但我没有发现任何相关信息。
虽然我有这个想法,但我不知道如何实现这种算法。任何帮助,将不胜感激。
解决方案
常见的压缩算法已经可以在常见的字符串上节省大量空间,如果您有来自同一网站的页面,这将是一个很好的例子。不要单独保存和压缩页面,而是尝试将相似的页面放在同一个文件中并压缩它。它应该使压缩率更好。
您应该尝试使压缩的窗口大小大于平均页面,以使其利用以前页面的数据。
如果你将它们保存到磁盘或使用数据库,你可以使用域名或 URL 的前 X 个字符作为索引来查找压缩文件,因此同一域/目录下的页面自然会被压缩在一起。
您可以采取的另一种方法是为您的压缩创建“字典”。一些压缩算法允许您提供一些示例文件来训练字典,然后可以使用该字典更好地压缩类似文件。执行此操作的算法示例是zstd。您可以在此处阅读如何使用字典功能。
推荐阅读
- ldap - Freeradius 和 Google LDAP
- artifactory - 如何将 Jfrog Artifactory pro 升级到企业或企业+?
- forms - 如何防止提交按钮使用 Foundation 6.6 和 Abide 提交表单
- here-api - 使用 HERE 在迪拜导航
- c# - 如何在 Awake 和 Editor 脚本中获得门?
- java - 在 Apache Karaf 上使用 Shiro 保护 CXF 休息服务
- twilio - 是否可以将 SMS 消息移动到 Twilio 中的消息队列前面?
- ios - UICollectionViewCell 将 indexpath.item 传递给列表
- javascript - 如何在 ReactJS 的 Promise 中解析 useReducer 的调度函数
- java - 在 SpringBoot 中使用 applicationProperties 动态更改 bean