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

Python 在独立的scrapy脚本中使用自定义中间件,python,scrapy,Python,Scrapy,我正在编写一个独立的抓取脚本(update.py),它实现了一个定制的下载中间件 该脚本当前正在使用CrawlerProcess()API,并有文档记录 它看起来像这样: from scrapy.crawler import CrawlerProcess import scrapy class CustomMiddleware(object): .... custom middleware definition settings = {'LOG_LEVEL' :'INFO',

我正在编写一个独立的抓取脚本(update.py),它实现了一个定制的下载中间件

该脚本当前正在使用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()
脚本返回错误:“没有名为‘更新’的模块”

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

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


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

您需要单独的中间件文件,并在脚本顶部导入中间件

类自定义中间件(对象): .... 自定义中间件定义

此类将位于middleware.py中

在“设置”中,仅添加如下内容

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

并且middleware.py和您的脚本都在同一个目录中。

trued.CustomMiddleware'?谢谢您的建议。在过去的一年里,我已经放弃了这个问题,并且找不到我正在处理的目录,所以无法测试它。如果其他人遇到同样的问题,请告诉我们此建议是否有效。感谢您的建议,但正如问题中所详述的,我正在寻找一种不需要任何额外文件(例如middleware.py)的解决方案。哦,然后您将该类放在同一文件类
类CustomMiddleware(object):def process\u request中(self,request,spider):proxy_list=[]request.meta['proxy']=“https://”+random.choice(proxy_list)
和in-process=CrawlerProcess({'LOG_-ENABLED':True,'CONCURRENT_-REQUESTS':100,'DOWNLOADER_-middleware':{'update.CustomProxyMiddleware':500,},})这对我来说很有用,先放这个类,然后放你的蜘蛛代码,最后放这个设置。。。