在独立的scrapy脚本中使用自定义中间件 - python

我正在编写一个实现自定义下载器中间件的独立抓取脚本(update.py)。

该脚本当前使用记录在here和here中的CrawlerProcess()API。

看起来像这样:

from scrapy.crawler import CrawlerProcess
import scrapy

class CustomMiddleware(object):
.... custom middleware definition

settings = {'LOG_LEVEL' :'INFO',
            'COOKIES_ENABLED' : False,
            'DOWNLOADER_MIDDLEWARES' : {
            'update.CustomMiddleware': 400,
            }
            }

class CarvanaSpider(scrapy.Spider)
... Spider definition

process = CrawlerProcess(settings)
process.crawl(CarvanaSpider)
process.start()

脚本返回错误:“没有名为'update'的模块”

如果我将Update.CustomMiddleware替换为CustomMiddleware,它将返回“无效路径”

我知道get_project_settings()实用程序,但是我的脚本不能放在项目文件夹中,并且必须能够在没有任何其他文件的情况下运行。

这是可以实现的吗?如果可以,实现这一目标的最佳方法是什么?

python大神给出的解决方案

您需要单独的中间件文件并在脚本之上导入中间件。

CustomMiddleware(object)类:
....自定义中间件定义

此类将在middleware.py中

并且在设置中仅添加这样

settings = {'LOG_LEVEL' :'INFO',
            'COOKIES_ENABLED' : False,
            'DOWNLOADER_MIDDLEWARES' : {
            'middleware.CustomMiddleware': 400,
            }
            }

和Middleware.py和您都在同一目录中编写脚本。

用大写字母拆分字符串,但忽略AAA Python Regex - python

我的正则表达式:vendor = "MyNameIsJoe. I'mWorkerInAAAinc." ven = re.split(r'(?<=[a-z])[A-Z]|[A-Z](?=[a-z])', vendor) 以大写字母分割字符串,例如:'我的名字是乔。 I'mWorkerInAAAinc”变成…

Python:同时在for循环中添加到列表列表 - python

我想用for循环外的0索引值创建一个新列表,然后使用for循环添加到相同的列表。我的玩具示例是:import random data = ['t1', 't2', 't3'] masterlist = [['col1', 'animal1', 'an…

在Python中迭代OrderedDict - python

我有以下OrderedDict:OrderedDict([('r', 1), ('s', 1), ('a', 1), ('n', 1), ('y', 1)]) 实际上,这表示单词中字母的出现频率。第一步-我将使用最后两个元素来创建一个这样的联合元组; pair…

如何在Matplotlib条形图后面绘制网格线 - python

x = ['01-02', '02-02', '03-02', '04-02', '05-02'] y = [2, 2, 3, 7, 2] fig, ax = plt.subplots(1, 1) ax.bar(range(len(y)), y, width=…

子条件的python条件覆盖 - python

我试图找到一个python代码覆盖率工具,该工具可以衡量语句中是否包含子表达式:例如,我想看看下面的示例是否涵盖了condition1 / condition2 / condtion3?if condition1 or condition2 or condition3: x = true_value python大神给出的解决方案 对此的唯一合理答案是:当前…