我正在研究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就会更新。
如果有更好的方法来提取更新的标题,请帮助我。答案 0 :(得分:0)
实现这一点的一个好方法是在执行实际请求之前覆盖DUPEFILTER_CLASS
以检查数据库。
Scrapy使用dupefilter类来避免两次获得相同的请求,但它只适用于运行蜘蛛。