Scrapy支持增量爬取的方式有多種:
JOBDIR
參數可以將爬取過程中的狀態保存下來,當再次運行爬蟲時會從上一次停止的地方繼續爬取。scrapy crawl myspider -s JOBDIR=jobdir
scrapy-deltafetch
插件來實現增量爬取。這個插件會記錄每個請求的指紋,當再次請求相同的URL時會檢查指紋,如果已經爬取過則不再請求。pip install scrapy-deltafetch
DOWNLOADER_MIDDLEWARES = {
'scrapy_deltafetch.DeltaFetch': 100,
}
class MySpider(scrapy.Spider):
name = 'myspider'
def start_requests(self):
# 查詢數據庫獲取上次爬取的時間戳
last_timestamp = get_last_timestamp()
# 構造請求并傳遞時間戳參數
yield scrapy.Request(url='http://example.com', meta={'last_timestamp': last_timestamp}, callback=self.parse)
def parse(self, response):
last_timestamp = response.meta.get('last_timestamp')
# 解析頁面內容并比較時間戳,只爬取新的數據
for item in response.css('div.item'):
timestamp = item.css('span.timestamp::text').extract_first()
if timestamp > last_timestamp:
yield {
'title': item.css('h2.title::text').extract_first(),
'link': item.css('a::attr(href)').extract_first(),
'timestamp': timestamp
}
通過以上方式,可以實現Scrapy的增量爬取功能,從而避免重復爬取數據。