无法从Scrapy Items.py文件导入字段对象

时间:2014-07-13 19:03:47

标签: python scrapy

我正在尝试使用以下import语句将字段引入Scrapy蜘蛛:

from test.items import fixture

在这种情况下,test.py是一个Scrapy脚本,它包含在文件夹路径中:

C:\Python27\mrscrap\mrscrap\spiders\test.py

文件Items.py与此相关,并且包含在文件夹路径中:

C:\Python27\mrscrap\mrscrap\items.py

这行代码产生错误:

No module named items

我在逻辑'test.items'中使用了正确的文件名吗?我是否将文件items.py放在正确的位置?

我的完整代码是:

from scrapy.spider import Spider
from scrapy.http import Request
from mrscrap.items import Fixture
from scrapy.utils.markup import remove_tags
from scrapy.cmdline import execute
import re

class GoalSpider(Spider):
    name = "goal"
    allowed_domains = ["whoscored.com"]
    start_urls = (
        'http://www.whoscored.com/',
        )

    def parse(self, response):
        return Request(
            url="http://www.whoscored.com/Players/3859/Fixtures/Wayne-Rooney",
            callback=self.parse_fixtures
        )

    def parse_fixtures(self,response):
        sel = response.selector
        for tr in sel.css("table#player-fixture>tbody>tr"):
             item = Fixture()
             item['tournament'] = tr.xpath('td[@class="tournament"]/span/a/text()').extract()
             item['date'] = tr.xpath('td[@class="date"]/text()').extract()
             item['team home'] = tr.xpath('td[@class="team home "]/a/text()').extract()
             yield item

execute(['scrapy','crawl','goal'])

Items.py中的类写为:

class Fixture(Item):
    tournament = Field()
    date = Field()
    team_home = Field()   

由于

1 个答案:

答案 0 :(得分:1)

一般scrapy项目的第一个答案,您可以在其中运行scrapy命令

由于您的项目似乎被命名为test,因此有点难以理解mrscrap的引用。如果您尝试从fixture文件导入items.py引用,则该语句应为:

from mrscrap.items import fixture

这需要在__init__.py中存在mrscrap\文件,但在使用scrapy创建项目后,默认情况下应该存在。

直接从其目录运行刮刀(如更新中所示)

您可以使用相对导入执行此操作,如PEP 328

中所示
from ..items import fixture

这要求您处于当前活动的程序包中,因此您的蜘蛛目录中必须有__init__.py个文件(尽管为空)。