場景:爬取某商城的部分商品。
隊列設(shè)計
這里至少需要爬取2種資源宪哩,一種是商品列表娩贷,一種是商品信息第晰。
所以要設(shè)計1條隊列锁孟,保存商品信息URL彬祖。
爬蟲1定期爬前N個列表頁 URL,把里面的商品信息URL爬下來品抽,保存到隊列里储笑。
爬蟲2定期從隊列中抽出商品信息URL,爬取商品信息圆恤,爬完后把該URL移出隊列突倍。
所以呢,簡單來說盆昙,只要有2張表就行了羽历,一張保存隊列信息,一張保存商品信息淡喜。
何時停止問題
為了避免每次都把所有商品爬一遍秕磷,就要在適當(dāng)?shù)臅r候停止。
爬列表頁的時候炼团,一般是設(shè)定只爬前 N 頁澎嚣。
爬商品信息URL的時候,一般是先檢查這個商品是否存在瘟芝,不存在就入隊易桃,存在的話,就表示接下來都是舊數(shù)據(jù)了锌俱,可以停止了晤郑。
當(dāng)然有種情況,就是有些舊的商品贸宏,會被人為地置頂贩汉,或者排到前面來。
這時候就要設(shè)置一個值 M锚赤,每次最多爬前 M 個匹舞,多了不爬。
數(shù)據(jù)更新問題:
有新商品進來线脚,直接插入即可赐稽,如果是舊商品,那要不要更新數(shù)據(jù)庫里的內(nèi)容呢浑侥?
一般來說是可以更新的姊舵,但有種情況例外,就是你的數(shù)據(jù)庫會有人去編輯的情況寓落。
如果你的數(shù)據(jù)庫有專人編輯括丁,那么最好不要更新舊商品,因為會覆蓋掉編輯的內(nèi)容伶选。并且史飞,數(shù)據(jù)表要采用軟刪除的方式尖昏,避免前面的人剛刪除了數(shù)據(jù),你的爬蟲又把數(shù)據(jù)寫進去了构资。