无法从Scrapy Items.py文件导入字段对象
我正在尝试使用以下导入语句来在一个 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 个回答
1
首先针对一般的scrapy项目,你需要运行scrapy命令
要理解test
指的是什么有点困难,因为你的项目似乎叫mrscrap
。如果你想从items.py
文件中导入fixture
,那么这条语句应该是:
from mrscrap.items import fixture
这需要在mrscrap\
目录下有一个__init__.py
文件,但在用scrapy创建项目时,这个文件默认应该是存在的。
直接从其目录运行爬虫(如更新中所示)
你可以使用相对导入来实现这一点,具体可以参考PEP 328。
from ..items import fixture
这要求你在一个当前活跃的包中,所以你需要在你的爬虫目录下有一个__init__.py
文件(即使是空的也可以)。