使用scrapy runspider命令时如何使用中间件?

How to use middlewares when using scrapy runspider command?

我知道当我们有一个scrapy项目时,我们可以在settings.py中配置中间件。

我没有启动过scrapy项目,我使用运行spider命令来运行 spider,但是我想使用一些中间件。如何在蜘蛛文件中设置?

所以,问题是,当你 运行 使用 scrapy runspider my_file.py 的蜘蛛时,你可以使用 -s 选项来仅传递简单的标量蜘蛛设置(如字符串或整数) .问题是,SPIDER_MIDDLEWARES 设置需要一个字典,并没有真正直接的方法通过命令行传递它。

目前,我知道在没有项目的情况下为蜘蛛设置 SPIDER_MIDDLEWARES 设置的唯一方法是使用自定义蜘蛛设置,目前在 Scrapy from the code repo (not officially released yet) since Scrapy 1.0 中可用。

如果你走那条路,你可以把你的中间件放在一个文件中 middlewares.py 然后做:

import middlewares  # need this, or you get import error

class MySpider(scrapy.Spider):
    name = 'my-spider'

    custom_settings = {
        'SPIDER_MIDDLEWARES': {
            'middlewares.SampleMiddleware': 500,
        }
    }

    ...

或者,如果您将中间件 class 放在同一个文件中,您可以使用:

import scrapy

class SampleMiddleware(object):
    # your middleware code here
    ...


def fullname(o):
    return o.__module__ + "." + o.__name__


class MySpider(scrapy.Spider):
    name = 'my-spider'

    custom_settings = {
        'SPIDER_MIDDLEWARES': {
            fullname(SampleMiddleware): 500,
        }
    }

    ...