Scrapy Deltafetch增量爬行

时间:2018-05-31 09:50:02

标签: python scrapy

我正在研究Scrapy废弃该网站。我想只提取那些在之前的运行中没有被删除的项目。 我正在“https://www.ndtv.com/top-stories”网站上尝试提取第一个标题(如果已更新)。

以下是我的代码:

import scrapy
from selenium import webdriver
from w3lib.url import url_query_parameter

class QuotesSpider(scrapy.Spider):
    name = "test"

    start_urls = [
       'https://www.ndtv.com/top-stories',
    ]

    def parse(self, response):
       print ('testing')
       print(response.url)

       yield {
            'heading': response.css('div.nstory_header    a::text').extract_first(),

        }
DOWNLOADER_MIDDLEWARES = {
    'scrapy_crawl_once.CrawlOnceMiddleware': 100,
}
SPIDER_MIDDLEWARES = {
    #'inc_crawling.middlewares.IncCrawlingSpiderMiddleware': 543,
    'scrapy.contrib.spidermiddleware.referer.RefererMiddleware': True,
    'scrapy_deltafetch.DeltaFetch': 100,
    'scrapy_crawl_once.CrawlOnceMiddleware': 100,
    'scrapylib.deltafetch.DeltaFetch': 100,
    'inc_crawling.middlewares.deltafetch.DeltaFetch': 100,
}
COOKIES_ENABLED = True
COOKIES_DEBUG = True
DELTAFETCH_ENABLED = True
DELTAFETCH_DIR = '/home/administrator/apps/inc_crawling'
DOTSCRAPY_ENABLED = True

我在setting.py文件中更新了以上代码:

我使用“scrapy crawl test -o test.json”命令运行上面的代码,每次运行后.db文件和test.json文件都会更新。

所以,我的期望是每当第一个标题更新时.db就会更新。

如果有更好的方法来提取更新的标题,请帮助我。

1 个答案:

答案 0 :(得分:0)

实现这一点的一个好方法是在执行实际请求之前覆盖DUPEFILTER_CLASS以检查数据库。

Scrapy使用dupefilter类来避免两次获得相同的请求,但它只适用于运行蜘蛛。