Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用scrapy runspider命令时如何使用中间件?_Scrapy - Fatal编程技术网

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

使用scrapy runspider命令时如何使用中间件?,scrapy,Scrapy,我知道我们可以在settings.py中配置中间件,当我们有一个scrapy项目时 我还没有启动一个scrapy项目,我使用runspider命令来运行spider,但我想使用一些中间件。如何在spider文件中设置它?因此,问题是,当您使用scrapy runspider my_file.py运行spider时,您可以使用-s选项仅传递简单的标量spider设置(如字符串或整数)。问题是,SPIDER\u middleware设置需要一个字典,而没有一个真正直接的方法通过命令行传递它 目前,我

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


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

因此,问题是,当您使用
scrapy runspider my_file.py
运行spider时,您可以使用
-s
选项仅传递简单的标量spider设置(如字符串或整数)。问题是,
SPIDER\u middleware
设置需要一个字典,而没有一个真正直接的方法通过命令行传递它

目前,我所知道的为没有项目的SPIDER设置SPIDER\u中间件的唯一方法是使用自定义SPIDER设置,该设置目前在中提供(尚未正式发布)

如果您这样做,您可以将您的中间件放入一个文件
middleware.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,
        }
    }

    ...

对于接近投票的选民:这是一个合法且有用的问题,请避免投票。我正试图使用相同的逻辑/设置来定义http代理中间件,如下所示:
custom_settings={'DOWNLOADER_middleware':{'scrapy.downloadermiddleware.httpproxy.httpproxymidleware':750}
然后在我的请求中使用
request.meta['proxy']=“proxy ip:proxy port”调用它,生成请求
,但爬行器没有运行,并说:
文件/usr/lib/python2.7/dist packages/twisted/internet/abstract.py”,第522行,在ISIPV6地址中,如果addr:TypeError:类型为“NoneType”的参数中的“%”不可编辑,我做错了什么
@user1991118请在发布您的蜘蛛代码时问一个新问题我已经问过了。在这里: