Scrapy Deltafetch добавочное сканирование - PullRequest
0 голосов
/ 31 мая 2018

Я работаю над 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

Я обновил код выше в настройках.py файл:

Я выполняю приведенный выше код с помощью команды «scrapy crawl test -o test.json» и после каждого запуска .db файл и файл test.json обновляются.

Итак, я ожидаю, что всякий раз, когда 1-й заголовок обновляется, только тогда обновляется .db.

пожалуйста, помогите мне, если есть какой-нибудь лучший способ извлечь обновленный заголовок.

1 Ответ

0 голосов
/ 31 мая 2018

хороший способ реализовать это - переопределить DUPEFILTER_CLASS для проверки вашей базы данных перед выполнением фактических запросов.

Scrapy использует класс dupefilter, чтобы избежать получения того же запросадважды, но это работает только для бегущих пауков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...