我试图重现这次演讲的代码:
https://www.youtube.com/watch?v=eD8XVXLlUTE
当我尝试运行蜘蛛时:
scrapy crawl talkspider_basic
我收到了这个错误:
raise KeyError("Spider not found: {}".format(spider_name))
KeyError: 'Spider not found: talkspider_basic'
蜘蛛的代码是:
from scrapy.spiders import BaseSpider
from scrapy.selector import HtmlXPathSelector
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.contrib.loader import XPathItemLoader
from pytexas.items import PytexasItem
class TalkspiderBasicSpider(BaseSpider):
name = "talkspider_basic"
allowed_domains = ["www.pytexas.org"]
start_urls = ['http://wwww.pytexas.org/2013/schedule']
def parse(self, response):
hxs = HtmlXPathSelector(response)
dls = hcs.select('///dl')
for dl in dls:
times = dl.select('dt/text()').extract()
titles = dl.select('dd/a/text()').extract()
for time, title in zip(times,titles):
title = title.strip()
yield PytexasItem(title=title,time= time)
项目的代码是:
from scrapy.item import Item, Field
class PytexasItem(Item):
title = Field()
time = Field()
speaker = Field()
description = Field()
项目名称和蜘蛛文件是
pytexas
和
分别是talk_spider_basic.py
,所以我不认为因为名字而有任何冲突。
编辑:
它具有默认结构:
pytexas/
scrapy.cfg
pytexas/
items.py
pipelines.py
settings.py
spiders/
__init__.py
talk_spider_basic.py
答案 0 :(得分:1)
根据Github问题#2254。因为某些模块已弃用。类似于 scrapy.contrib 。
所以你应该做一些改变。
自:
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.contrib.loader import XPathItemLoader
要:
from scrapy.linkextractors import LinkExtractor
from scrapy.loader import XPathItemLoader
答案 1 :(得分:1)
我知道这篇文章可能很旧。但我发现了另一个问题,可能会产生错误“蜘蛛未找到”。我将我的蜘蛛组织在文件夹中,例如<crawler-project>/spiders/full
,<crawler-project>/spiders/clean
。所以我创建了新目录 - <crawler-project>/spiders/aaa
- 我放置了新蜘蛛。在我创建__init__.py
文件之前,scrapy没有找到这个新蜘蛛。 因此,如果您想在文件夹中组织蜘蛛,则应创建有效的python模块文件夹。
答案 2 :(得分:0)
在某些情况下有效的一种解决方案是降低你的scrapy(如果它> = 1.3)。为此,您可以运行以下命令:
pip install scrapy==1.2