scrapy 避免在蜘蛛的自定义设置中定义很少的设置

kgsdhlau  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(238)

我正在使用自定义设置的scrapy蜘蛛和一些设置是得到避免,而运行蜘蛛。最重要的是'DOWNLOADER_MIDDLEWARES'
下面是蜘蛛的自定义设置

custom_settings = {
        'DOWNLOADER_MIDDLEWARES': {'app.sitescrapper.sitescrapper.middlewares.RotateUserAgentMiddleware': 400,
                                   'app.sitescrapper.sitescrapper.middlewares.ProjectDownloaderMiddleware': 543,
                                   'app.sitescrapper.sitescrapper.selenium_middlewares.SeleniumMiddleware': 123,
                                    },
        'COOKIES_ENABLED': False,
        'CONCURRENT_REQUESTS': 6,
        'DOWNLOAD_DELAY': 2,
        'CELERYD_MAX_TASKS_PER_CHILD' : 1,
        'TELNETCONSOLE_ENABLED' : False,
        'AUTOTHROTTLE_ENABLED' : True,
        'LOG_LEVEL' : 'WARNING',
        # Duplicates pipeline
        'ITEM_PIPELINES': {'app.sitescrapper.sitescrapper.pipelines.DuplicatesPipeline': 300},
    }

日志中的以下设置将被覆盖

Overridden settings:
{'AUTOTHROTTLE_ENABLED': True,
'CONCURRENT_REQUESTS': 6,
'COOKIES_ENABLED': False,
'DOWNLOAD_DELAY': 2,
'LOG_LEVEL': 'WARNING',
'TELNETCONSOLE_ENABLED': False}

管线也执行良好。如何激活'DOWNLOADER_MIDDLEWARES'

更新

@celery.task(name='CeleryTask.crawl')
def scrape(baseURL):
    crawl_data = [baseURL]
    def run_process():
        process = CrawlerProcess()
        process.crawl(myCrawler,category=crawl_data)
        process.start()
    p = p1(target=run_process)
    p.start()
    p.join()

Spider是以异步作业的方式运行的,而不是从命令行运行,当从CLI执行Spider时,中间件被激活。

更新2

从CLI
如果使用scrapy runspider file_name.py,则自定义设置中的中间件被激活。但是使用scrapy crawl spider_name,则自定义设置中的中间件不被激活。

y3bcpkx1

y3bcpkx11#

Overridden settings中列出的设置:
仅涵盖/scrapy/settings/default_settings.py中的设置-仅涵盖来自Scrapy的设置(不涵盖来自第三方模块的设置)
和非字典(代码)的设置-中间件将不在此处列出。
为了检查自定义DOWNLOADER_MIDDLEWARESSPIDER_MIDDLEWARESITEM_PIPELINESEXTENSIONS,需要检查日志条目(就在overridden settings日志条目之后:
[scrapy.middleware] Enabled extensions:...
[scrapy.middleware] Enabled downloader middlewares:
[scrapy.middleware] Enabled spider middlewares:
[scrapy.middleware] Enabled item pipelines:
如果自定义中间件连接正确-自定义中间件将在列表中。(如果不正确-可能是路径问题)

相关问题