我正在尝试使用以下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()
由于
答案 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
个文件(尽管为空)。