在爬蟲(chóng)編寫(xiě)中,為了避免重復(fù)爬取同一個(gè)網(wǎng)頁(yè),一般會(huì)使用增量爬蟲(chóng),這樣就避免了重復(fù)爬取相同的一個(gè)網(wǎng)頁(yè)妹窖,只爬取新的網(wǎng)頁(yè)數(shù)據(jù)。scrapy-redis做分布式的時(shí)候使用的是布隆過(guò)濾器來(lái)做的增量爬蟲(chóng)收叶,本人平時(shí)一般小的爬蟲(chóng)就沒(méi)有使用框架骄呼,直接用的requests寫(xiě)的,requests結(jié)合MongoDB數(shù)據(jù)庫(kù)做的增量爬蟲(chóng)滔驾,如果網(wǎng)站不需要登錄的話,就可以先把詳情頁(yè)的url和解析詳情頁(yè)分開(kāi)來(lái)做俄讹,把爬取到的url保留一個(gè)字段哆致,比如status,爬取到的沒(méi)有解析的就標(biāo)記為0患膛,(MongoDB數(shù)據(jù)庫(kù)中可以設(shè)置唯一索引摊阀,避免保存相同的url),這樣在寫(xiě)解析詳情頁(yè)的時(shí)候用這個(gè)來(lái)獲取(MongoDB數(shù)據(jù)庫(kù))
item = self.coll_url.find_and_modify({'status': 0}, {'$set': {'status': 1}})
這樣就可以保證獲取到的不是相同的url胞此。