美文网首页
轻松排雷,爬虫让 gzip 炸弹变哑炮

轻松排雷,爬虫让 gzip 炸弹变哑炮

作者: 程序员小西 | 来源:发表于2022-03-31 12:04 被阅读0次

作为爬虫,如何避免踩中gzip炸弹?

最直接的方法,就是把你的爬虫隐藏起来,因为gzip炸弹只能在发现了爬虫以后使用,否则就会影响到正常用户。只要你的爬虫让网站无法发现,那么自然就不会踩中炸弹。

如果你没有把握隐藏爬虫,那么,请继续往下看。

查看gzip炸弹的URL返回的Headers,你会发现如下图所示的字段:

图片.png

你只需要判断resp.headers中,是否有一个名为content-encoding,值包含gzipdeflate的字段。如果没有这个字段,或者值不含gzipdeflate那么你就可以放心,它大概率不是炸弹。

值得一提的是,当你不读取resp.contentresp.text的时候,Requests是不会擅自给你解压缩的,如下图所示。因此你可以放心查看Headers。:

图片.png

那么,如果你发现网站返回的内容确实是gzip压缩后的内容了怎么办呢?这个时候,我们如何做到既不解压缩,又能获取到解压以后的大小?

如果你本地检查一个.gz文件,那么你可以使用命令gzip -l xxx.gz来查看它的头信息:

图片.png

打印出来的数据中,第一个数字是压缩后的大小,第二个数字是解压以后的大小,第三个百分比是压缩率。这些信息是储存在压缩文件的头部信息中的,不用解压就能获取到。

那么当我使用Requests的时候,如何获得压缩后的二进制数据,防止它擅自解压缩?方法其实非常简单:

import requests

resp = requests.get(url, stream=True)
print(resp.raw.read())

运行效果如下图所示:

图片.png

此时可以看到,这个大小是压缩后的二进制数据的大小。现在,我们可以使用如下代码,在不解压的情况下,查询到解压缩后的文件大小:

import gzip
import io
import requests
resp = requests.get(url, stream=True)

decompressed = resp.raw.read()
with gzip.open(io.BytesIO(decompressed), 'rb') as g:
    g.seek(0, 2)
    origin_size = g.tell()
    print(origin_size)

运行效果如下图所示:

图片.png

打印出来的数字转成MB就是10MB,也就是我们昨天测试的解压后的文件大小。

使用这个方法,我们就可以在不解压的情况下,知道网站返回的gzip压缩数据的实际大小。如果发现实际尺寸大得离谱,那就可以确定是gzip炸弹了,赶紧把它丢掉。

相关文章

  • 轻松排雷,爬虫让 gzip 炸弹变哑炮

    作为爬虫,如何避免踩中gzip炸弹? 最直接的方法,就是把你的爬虫隐藏起来,因为gzip炸弹只能在发现了爬虫以后使...

  • 向别人请教,这几个问题不要随便问

    本篇文章排雷,分享一下在请教问题时,有哪些问题不要随便问。有些问题问了后真的是文字炸弹,不但会让对方难以回答,而且...

  • 利用爬虫进行观影排雷

    上次谢了如何在豆瓣找适合自己的图书看,这次我们来挑一挑电影。要怎么挑一部自己可能会喜欢看的电影呢,好多人喜欢上豆瓣...

  • 哑炮仗

    清晨,鸡鸣声中,小镇开始了崭新的一天。 阳光下,人人脸上都挂着善意的笑,连狗儿猫儿也乖巧地可爱。 小镇中学,心理健...

  • 鸡蛋变炸弹02012019

    小明家有个大院子,院子外围是一圈篱笆,篱笆里边种满了蔬菜及各种各样的果树。为了美观,爸爸要求小明为篱笆刷上白漆。 ...

  • 解压磁盘

    gzip gzip xxx yasuo gzip -d xxx jieya 文件 gzip -rxxx yasuo...

  • 诗:非定时炸弹

    人这一生的心路历程 不知道埋伏了多少炸弹 我们有时候 既成了埋雷的敌人 又成了排雷的工兵 本来真实的心境应该是平和...

  • Nginx 配置优化

    一、开启Gzip1、参数gzip on;gzip_min_length 1k;gzip_buffers 4 16k...

  • Nginx性能优化(4)

    一、gzip压缩 1. gzip简介 gzip是nginx服务器的ngx_http_gzip_module模块提供...

  • Nginx作为静态资源web服务器(gzip,缓存,跨域,防盗链

    一、gzip (1)配置语法 Syntax: gzip on|off;Default:gzip off;Conte...

网友评论

      本文标题:轻松排雷,爬虫让 gzip 炸弹变哑炮

      本文链接:https://www.haomeiwen.com/subject/dpzgjrtx.html