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

时间:2015-01-24 06:15:08

标签: scrapy

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

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

1 个答案:

答案 0 :(得分:3)

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

目前,我知道为没有项目的蜘蛛设置SPIDER_MIDDLEWARES设置的唯一方法是使用自定义蜘蛛设置,该设置目前在Scrapy from the code repo(尚未正式发布)中可用 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,
        }
    }

    ...

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

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,
        }
    }

    ...