Python 爬蟲優化——設置不自動讀取響應正文,避免自動讀取大文件
有的童鞋可能發現,自己的項目,自從按推薦,升級uillib庫到urllib3之後,爬蟲什麼的,有時候會特別耗時,然而自己只不過是分析一下網頁,不該如此。
排查時我們往往發現,在某個鏈接卡住了。
這要從 Python 的 urllib3
說起,它的網絡請求默認會自動讀取響應體正文。這會導致什麼問題?導致一旦加載鏈接,直接全部讀取,而網絡上常常包含有圖片、視頻、壓縮文件、軟件、APP等體積較大甚至突破天際的文件。於是……悲劇就誕生了。
即使我們根據鏈接名稱,過濾掉這些軟件,然而仍會存在漏網之魚——某些網站搞出來的鏈接,不包含文件後綴,導致不知道是否要過濾掉。怎麼辦?
答案是對http響應頭進行分析,符合條件,再讀取響應正文
,http響應頭中包含的東西很多,例如
content-type: image/png
與 content-length: 960
依據這些條件,可以判斷文件類型(MimeType),文件大小之後,再決定是否讀取。
對於使用urlib來說,不必擔心,而使用urllib3以及以urllib3爲基礎的庫(例如request),估計都存在該問題,設置preload_content=False
, 分析之後再決定是否讀取內容即可
res = urllib3.request(method="GET", url=url,preload_content=False)
if int(content_length) > 1024 * 1024:
# > 1M
return
if "image" in content_type:
res.data
……