Как добавить еще одно промежуточное ПО для одного конкретного паука вместе со всеми программами в settings.py ?
Предположим, settings.py — это:
Код: Выделить всё
DOWNLOADER_MIDDLEWARES = {
'myproject.middlewares.CustomDownloaderMiddleware1': 543,
'myproject.middlewares.CustomDownloaderMiddleware2': 544,
}
Я попробовал
Код: Выделить всё
class MySpider(Spider):
name = 'my_spider'
def __init__(self, *args, **kwargs):
super(MySpider, self).__init__(*args, **kwargs)
settings = get_project_settings()
# Get existing middlewares
middlewares = settings.get('DOWNLOADER_MIDDLEWARES', {})
# Append or update your additional middleware
middlewares['myproject.middlewares.MyAdditionalMiddleware'] = 550
# Apply it to the spider's settings
self.custom_settings = {
'DOWNLOADER_MIDDLEWARES': middlewares
}
def start_requests(self):
# Spider logic here
pass
Код: Выделить всё
from scrapy.spiders import Spider
from scrapy.utils.project import get_project_settings
class MySpider(Spider):
name = 'my_spider'
@classmethod
def from_crawler(cls, crawler, *args, **kwargs):
spider = super(MySpider, cls).from_crawler(crawler, *args, **kwargs)
# Get the global settings
settings = crawler.settings
# Get the existing middlewares
middlewares = settings.get('DOWNLOADER_MIDDLEWARES', {}).copy()
# Append or update your additional middleware
middlewares['myproject.middlewares.MyAdditionalMiddleware'] = 550
# Update the spider's settings for this instance
spider.custom_settings = {
'DOWNLOADER_MIDDLEWARES': middlewares
}
return spider
def start_requests(self):
# Spider logic here
pass
Примечание
Приведенные выше коды были созданы ChatGpt https://chatgpt.com/share/6710b8b3-eda8 ... 244501475b
Подробнее здесь: https://stackoverflow.com/questions/790 ... in-setting