Python 爬蟲時間優化——設置不自動讀取響應正文,避免自動讀取大文件

Python 爬蟲優化——設置不自動讀取響應正文,避免自動讀取大文件

有的童鞋可能發現,自己的項目,自從按推薦,升級uillib庫到urllib3之後,爬蟲什麼的,有時候會特別耗時,然而自己只不過是分析一下網頁,不該如此。

排查時我們往往發現,在某個鏈接卡住了。

這要從 Python 的 urllib3說起,它的網絡請求默認會自動讀取響應體正文。這會導致什麼問題?導致一旦加載鏈接,直接全部讀取,而網絡上常常包含有圖片、視頻、壓縮文件、軟件、APP等體積較大甚至突破天際的文件。於是……悲劇就誕生了。

即使我們根據鏈接名稱,過濾掉這些軟件,然而仍會存在漏網之魚——某些網站搞出來的鏈接,不包含文件後綴,導致不知道是否要過濾掉。怎麼辦?

答案是對http響應頭進行分析,符合條件,再讀取響應正文,http響應頭中包含的東西很多,例如
content-type: image/pngcontent-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
……
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章