iT邦幫忙

0

如何減少爬蟲的請求數,仍能保證資料的新鮮度?

我有許多Android Devices要連線到backend server, 這個server儲存了許多爬蟲爬下來的資料(例如Google.com)。

當Android Devices向server請求資料時,server首先會向Google.com請求並「比對」是否為最新資料。其概念就像Proxy。

目前的比對方法,是將Google.com的HTML下載下來,然後與server上的HTML cache比對,但是這樣無法減少請求數,而目標網站是隨時會更新的論壇,並非像Google.com那樣靜態網站。

我應該如何減少請求數?
如果能有些Python or Java的實例會更好,提前向各位致謝。

2
海綿寶寶
iT邦大神 1 級 ‧ 2020-12-21 17:37:20

都寫 proxy,cache 了
就在你每一筆 HTML Cache 都加上「更新時間」欄位
然後決定一個「生命週期」,隨便定個4 小時好了,想改長改短隨便你

Android devices 來 requst 時
比較「系統時間」和「更新時間」的差距是否大於「生命週期」
否:提供 HTML Cache 給 Android devices
是:下載 HTML 存進 HTML Cache 並更新「更新時間」,提供 HTML Cache 給 Android devices

2

如何減少爬蟲的請求數,仍能保證資料的新鮮度

基本上這兩個需求是衝突的。
因為要保持最新鮮。一定是每次都請求是最好的。
但每次請求就不可能降低請求數。

所以,你只能決定其中間的平衡時間點。

以前曾經有寫過對應的權重值處理。
時間點會自由調整。當資料內容有更新時,緩存時間改為30分。
如果一直內容都沒變動。則緩存的時間會一直往上加。最大到1天緩存。

借此可以區分頻繁變動跟不頻繁變動的更新處理。
以上可以給你參考。

0
kikulu
iT邦研究生 4 級 ‧ 2020-12-22 11:33:29

這個server儲存了許多爬蟲爬下來的資料(例如Google.com)。

當Android Devices向server請求資料時,server首先會向Google.com請求並「比對」是否為最新資料。其概念就像Proxy。

這兩個有點矛盾 又是cache又是proxy
如果你在意都是最新,你應該走代理,或是直接從device去訪問和解析資料,端視你資料可接受的新鮮度

折衷的辦法就是你的backend定時(10min or 1h 2h..視需求而定)去更新,然後產生一個version號
前端device先比對version,如果較新就更新

1
japhenchen
iT邦大師 1 級 ‧ 2020-12-22 14:03:58

不讓End Device去爬,而是有個伺服器去爬,整理成資料庫,每天爬一次就好,Device再向你的伺服器發出請求就好

這樣爬主機的總次數可以壓下不少吧

1
雷伊
iT邦高手 1 級 ‧ 2020-12-22 14:38:03

爬我家主機的我都會弄到他們不要不要的
如果前輩們也有此困擾歡迎私訊
我們一起找幾萬人訪問他們家網頁(非DDOS),讓害蟲公司的頻寬變成貧寬。

我要發表回答

立即登入回答