Scrapy игнорирует обычные осадки на паука - PullRequest
1 голос
/ 22 апреля 2020

В scrapy 2.0.1 я пытаюсь установить настройку глубины для каждого паука. Хотя он работает в глобальных настройках, он не работает с отдельными настройками для каждого паука:

class GetbidSpider(CrawlSpider):
    name = 'test'

    custom_settings = {
        'DOWNLOAD_DELAY': 5,
        'DEPTH_LIMIT': 1, 
    }

И это промежуточное ПО:

from scrapy import signals
class BidSpiderMiddleware(object):
    @classmethod
    def from_crawler(cls, crawler):
        # This method is used by Scrapy to create spiders.
        s = cls()
        crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
        return s

     def spider_opened(self, spider):
        spider.logger.info('Spider opened: %s' % spider.name)

Как можно установить глубину для каждого паука основа

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

В scrapy 2.02 я пытаюсь

На данный момент последняя доступная версия scrapy - 2.0.1 .

На первый взгляд ваш код в порядке, и он должен работать как вы ожидаете (настройки для паука).

Есть несколько условий, когда он не будет работать:

  1. Использование инструмента командной строки с -s args для определения настроек.
    эти настройки имеют больший приоритет , чем у паука custom_settings. В результате будут отменены настройки паука custom_settings.
  2. name = 'test'. Атрибут
    Spider name должен быть разным / уникальным для каждого паука.
  3. custom settings для каждого паука будет работать, только если он будет жестко закодирован в коде паука, как в примере кода. Это не будет работать, если вы попытаетесь .. динамически обновить их с помощью методов spider __init__ или from_crawler.
0 голосов
/ 23 апреля 2020

Я наконец нашел ошибку. Несколько строк внизу была запись, перезаписывающая настройки.

Теперь я добавляю настройки в существующий словарь, и меня нет в лесу: -)

custom_settings = af.create_image_dir(name)
custom_settings.update({
    'DOWNLOAD_DELAY': 30,
    'DEPTH_LIMIT': 1, 
})
...