Scrapy:ImportError:没有名为pipelines的模块

时间:2017-07-25 22:27:26

标签: python python-2.7 scrapy scrapy-spider

我在让刮刀加载项目管道时遇到问题。在我尝试添加自定义管道的尝试中,我收到以下错误:

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

如何将自定义管道添加到设置?

2 个答案:

答案 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”,它就起作用了!

因此,我也尝试仅在常规设置中进行设置。在这里,我运行蜘蛛时没有任何抱怨,但似乎也没有使用它。所以这不是我的选择。