21
votes

When I try to run scrapy I get this error ImportError: No module named items

I just added in items.py the list of things I want to scrape and in the spider.py I have imported the class with from spider.items import SpiderItem

Dont know why its not loading it...

Package layout is...

./spider
./spider/pipelines.py
./spider/settings.py
./spider/spiders
./spider/spiders/spider_spider.py
./spider/spiders/test.py
./spider/spiders/__init__.py
./spider/middlewares.py
./spider/__init__.py
./spider/items.py
6
your middle sencence makes no sense. you probably have a problem with (relative) imports. you should post your package layout, then maybe someone can help you. - mata

6 Answers

28
votes

From this message on google groups:

Your spider module is named the same as your scrapy project module, so python is trying to import items relative to byub.py spider.

You are facing a common regret of python imports, see http://www.python.org/dev/peps/pep-0328

quicks fixes:

  • rename your spider module to byub_org.py or similar.
  • or use from __future__ import absolute_import in byub.py spider.
  • or rename your project to something like byubbot.
4
votes

I happend to face this problem because my spider name is the same with the scrapy project.

Just rename the spider name will make it.

2
votes

Without renaming any files, change from spider.items import SpiderItem to from .. import items and refer to the item as items.SpiderItem in your code.

2
votes

It's a good solution to rename your spider module.

But don't forget to delete the related *.pyc file after renaming, considering that the *.pyc file plays a role like cache.

1
votes

Sorry for necroposting. Try put in file ./spider/__init__.py

that

 import items
0
votes

You are missing the following line after your import statements in your spider.py file.

class ProjectnamegoeshereSpider(BaseSpider):