日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
一日一技:輕松排雷,爬蟲讓 Gzip 炸彈變啞炮

大家都知道我的公眾號風格,兩頭得罪討好人 。昨天我?guī)土撕蠖?,今天我就幫幫爬蟲。作為爬蟲,如何避免踩中gzip炸彈?

從事電信內(nèi)江機房,服務器租用,云主機,虛擬主機,申請域名,CDN,網(wǎng)絡代維等服務。

最直接的方法,就是把你的爬蟲隱藏起來,因為gzip炸彈只能在發(fā)現(xiàn)了爬蟲以后使用,否則就會影響到正常用戶。只要你的爬蟲讓網(wǎng)站無法發(fā)現(xiàn),那么自然就不會踩中炸彈。

如果你沒有把握隱藏爬蟲,那么,請繼續(xù)往下看。

查看gzip炸彈的URL返回的Headers,你會發(fā)現(xiàn)如下圖所示的字段:

你只需要判斷resp.headers中,是否有一個名為content-encoding,值包含gzip或deflate的字段。如果沒有這個字段,或者值不含gzip、deflate那么你就可以放心,它大概率不是炸彈。

值得一提的是,當你不讀取resp.content、resp.text的時候,Requests是不會擅自給你解壓縮的,如下圖所示。因此你可以放心查看Headers。:

那么,如果你發(fā)現(xiàn)網(wǎng)站返回的內(nèi)容確實是gzip壓縮后的內(nèi)容了怎么辦呢?這個時候,我們?nèi)绾巫龅郊炔唤鈮嚎s,又能獲取到解壓以后的大小?

如果你本地檢查一個.gz文件,那么你可以使用命令gzip -l xxx.gz來查看它的頭信息:

打印出來的數(shù)據(jù)中,第一個數(shù)字是壓縮后的大小,第二個數(shù)字是解壓以后的大小,第三個百分比是壓縮率。這些信息是儲存在壓縮文件的頭部信息中的,不用解壓就能獲取到。

那么當我使用Requests的時候,如何獲得壓縮后的二進制數(shù)據(jù),防止它擅自解壓縮?方法其實非常簡單:

import requests

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

運行效果如下圖所示:

此時可以看到,這個大小是壓縮后的二進制數(shù)據(jù)的大小?,F(xiàn)在,我們可以使用如下代碼,在不解壓的情況下,查詢到解壓縮后的文件大?。?/p>

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)

運行效果如下圖所示:

打印出來的數(shù)字轉(zhuǎn)成MB就是10MB,也就是我們昨天測試的解壓后的文件大小。

使用這個方法,我們就可以在不解壓的情況下,知道網(wǎng)站返回的gzip壓縮數(shù)據(jù)的實際大小。如果發(fā)現(xiàn)實際尺寸大得離譜,那就可以確定是gzip炸彈了,趕緊把它丟掉。


分享標題:一日一技:輕松排雷,爬蟲讓 Gzip 炸彈變啞炮
當前網(wǎng)址:http://www.dlmjj.cn/article/ccieiei.html