我在让刮刀加载项目管道时遇到问题。在我尝试添加自定义管道的尝试中,我收到以下错误:
ImportError: No module named pipelines
我已经尝试了文档,但它并没有真正解释如何设置ITEM_PIPELINE
选项路径。这是文档中的示例:
ITEM_PIPELINES = {
'myproject.pipelines.PricePipeline': 300,
'myproject.pipelines.JsonWriterPipeline': 800,
}
myproject
来自哪里?
以下是我的应用程序的目录结构:
├── README.md
├── bot.py
├── data
│ └── formax.json
├── pipelines
│ ├── FormaxPipeline.py
│ └── __init__.py
├── praw.ini
├── requirements.txt
└── scrapers
├── __init__.py
├── formax.py
在formax.py
课程中,我设置了一些设置。
custom_settings = {
'ITEM_PIPELINES': {
'pipelines.FormaxPipeline': 100
},
'USER_AGENT': 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'
}
我从根目录运行:
scrapy runspider scrapers/formax.py -o data/formax.json
刮刀失败并出现以下错误:
ImportError: No module named pipelines
如何将自定义管道添加到设置?
答案 0 :(得分:2)
有几件事。首先,Scrapy希望您有标准的Scrapy project structure,其中myproject
是您的项目名称(以及该项目文件夹的名称)。
其次,ITEM_PIPELINES
需要您指定管道的类,从我所看到的(您的应用程序的结构和custom_settings
)指定的模块。在pipelines.FormaxPipeline
设置中,您应该pipelines.FormaxPipeline.FormaxPipeline
而不是ITEM_PIPELINES
。 (这里我假设您的类名为FormaxPipeline
,并在FormaxPipeline.py
文件中定义。)
但实际错误来自Scrapy无法找到模块的事实。不知道如何更干净地解决它,因为你已经做了Scrapy不期望的事情(没有项目结构),但一种解决方法就是以这种方式运行蜘蛛:
PYTHONPATH="$PYTHONPATH:." scrapy runspider scrapers/formax.py -o data/formax.json
即。告诉Python在哪里查找你的代码。
答案 1 :(得分:0)
老问题,但我也遇到了同样的问题,它使我丧命了好几个小时!我在蜘蛛类中设置了custom_settings变量,并在pipeline.py文件中定义了一个管道类,该文件有几个文件夹。然后,像您一样,我做了一些事情,效果是:“ myprojname.pipelines.CsvPipeline”及其变体。每次我得到模块错误。
然后我意识到了一些事情。在文档中,他们可能会假设您是在settings.py文件中而不是在Spider类内部的custom_settings变量中进行设置的(我看到您没有在此处包含设置文件,但是它附带了一些麻烦的内容我确定是startproject命令)。因此,代替了我的蜘蛛文件所在的位置,我在SAME文件夹中创建了一个名为pipelines.py的文件。然后我执行了“ pipelines.CsvPipeline”,它就起作用了!
因此,我也尝试仅在常规设置中进行设置。在这里,我运行蜘蛛时没有任何抱怨,但似乎也没有使用它。所以这不是我的选择。