Scrapy蜘蛛未找到错误

时间:2012-03-26 17:27:28

标签: python scrapy

这是带有python 2.7的Windows 7

我在名为caps的目录中有一个scrapy项目(这是scrapy.cfg所在的位置)

我的蜘蛛位于caps \ caps \ spiders \ campSpider.py

我进入scrapy项目并尝试运行

scrapy crawl campSpider -o items.json -t json

我收到一条错误,指出无法找到蜘蛛。班级名称​​是 campSpider

...
    spider = self.crawler.spiders.create(spname, **opts.spargs)
  File "c:\Python27\lib\site-packages\scrapy-0.14.0.2841-py2.7-win32.egg\scrapy\spidermanager.py", l
ine 43, in create
    raise KeyError("Spider not found: %s" % spider_name)
KeyError: 'Spider not found: campSpider'

我错过了一些配置项吗?

21 个答案:

答案 0 :(得分:47)

确保已设置蜘蛛的“name”属性。 例如:

class campSpider(BaseSpider):
   name = 'campSpider'

如果没有name属性,scrapy管理器将无法找到您的蜘蛛。

答案 1 :(得分:22)

还要确保您的项目未被调用scrapy!我犯了这个错误并重命名它解决了这个问题。

答案 2 :(得分:3)

您是否设置了SPIDER_MODULES设置?

  

SPIDER_MODULES

     

默认值:[]

     

Scrapy寻找蜘蛛的模块列表。

     

示例:

     

SPIDER_MODULES = ['mybot.spiders_prod', 'mybot.spiders_dev']

答案 3 :(得分:2)

你必须给你的蜘蛛命名。

但是, BaseSpider 已弃用,请改用 Spider

from scrapy.spiders import Spider
class campSpider(Spider):
   name = 'campSpider'

该项目应该由startproject命令创建:

scrapy startproject project_name

它提供了以下目录树:

project_name/
    scrapy.cfg            # deploy configuration file

    project_name/             # project's Python module, you'll import your code from here
        __init__.py

        items.py          # project items file

        pipelines.py      # project pipelines file

        settings.py       # project settings file

        spiders/          # a directory where you'll later put your spiders
            __init__.py
            ...

确保 settings.py 具有蜘蛛模块的定义。 例如:

BOT_NAME = 'bot_name' # Usually equals to your project_name 

SPIDER_MODULES = ['project_name.spiders']
NEWSPIDER_MODULE = 'project_name.spiders'

在本地或ScrappingHub上运行蜘蛛应该没有问题。

答案 4 :(得分:1)

确保您的蜘蛛文件保存在spider目录中。 Crawler在spider目录中查找蜘蛛名称

答案 5 :(得分:1)

尝试在命令行上运行scrapy list。如果蜘蛛上有任何错误,它会检测到它。

在我的情况下,我直截了当地从另一个项目复制代码而忘记从蜘蛛模块导入中更改项目名称

答案 6 :(得分:0)

不正确的python文件名可能导致此错误(例如crawler.pyscrapy.py)。

答案 7 :(得分:0)

仅在此处添加我的学习要点。

我的搜寻器在工作,突然开始出现错误,然后来到这里寻找解决方案。

无法修复它,因此检查了更改并愚蠢地创建了一个新的变量“ name”。

这也导致抓痒的人也找不到蜘蛛的名字。

答案 8 :(得分:0)

我通过固定文件名来固定。

最初是my.spider.py。固定,myspider.py

我对python和scrapy很陌生,所以我不确定这是否是愚蠢的错误。

答案 9 :(得分:0)

确保在命令行中使用相同的name属性来运行Spider ...

草率爬网

答案 10 :(得分:0)

我有同样的问题。当我在cmd中使用“ scrapy list”时,命令在列表中列出了我要获取错误的蜘蛛名称,但是当我尝试使用scrapy crawl SpiderName.py运行它时,我曾经得到了Scrapy spider not found错误。 我以前用过这个蜘蛛,一切都很好。 因此,我使用了秘密武器,重新启动了系统,问题已解决:D

答案 11 :(得分:0)

有时这种奇怪的行为是由LOG_STDOUT = True

引起的

尽管它默认为False,所以请检查它以及是否将其设置为True-尝试将其设置为默认

LOG_STDOUT = False

这是logged issue

答案 12 :(得分:0)

此外,您可能还没有部署蜘蛛。因此,首先使用“ scrapyd”来启动服务器,然后使用“ scrapyd-deploy”来部署并运行命令。

答案 13 :(得分:0)

如果您正在按照https://docs.scrapy.org/en/latest/intro/tutorial.html

中的指南进行操作

然后执行以下操作:

$ sudo apt install python-pip
$ pip install Scrapy
(logout, login)
$ cd
$ scrapy startproject tutorial
$ vi ~/tutorial/tutorial/spiders/quotes_spider.py
$ cd ~/tutorial/tutorial
$ scrapy crawl quotes

如果您尝试自己在~/tutorial下创建蜘蛛目录,则会发生错误。

答案 14 :(得分:0)

啊,是的,您应该输入“名称变量值”的值。

import scrapy

class QuoteSpider(scrapy.Spider):
    name = 'quotes'
    start_urls = [
        'http://quotes.toscrape.com/'
    ]

    def parse(self, response):
        title = response.css('title').extract()
        yield {'titleText' : title}

因此,在这种情况下,名称='quotes'。 然后在命令行中输入: “抓取的抓取报价”

那是我的问题。

答案 15 :(得分:0)

我也有这个问题,事实证明它很小。确保您的课程继承自ServerPaymentResult = integration.GetServerPaymentRequest(ServerPaymentRequest, SagePaySettings.ServerPaymentUrl);

Dim integration As SagePayIntegration
Dim serverPaymentResult As IServerPaymentResult = payment.GetServerPaymentResult()
Dim serverPaymentRequest As IServerPayment = payment.GetServerPaymentRequest()
'populate serverPaymentRequest Object

答案 16 :(得分:0)

在我的情况下,我设置了'LOG_STDOUT = True',当您使用'/listspiders.json'寻找蜘蛛时,scrapyd无法将结果返回给json响应。取而代之的是,结果被打印到您在scrapyd的default_scrapyd.conf文件中设置的日志文件中。 因此,我以此更改了设置,并且效果很好。

LOG_STDOUT = False

答案 17 :(得分:0)

在没有项目的情况下使用runspider和fileName 与项目一起使用爬网和名称 样本: RewriteEngine On # If an existing asset or directory is requested go to it as it is RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR] RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d RewriteRule ^ - [L] # If the requested resource doesn't exist, use index.html RewriteRule ^ /index.html

答案 18 :(得分:0)

CrawlSpider类中的

Name 属性定义蜘蛛名称,此名称在命令行中用于调用蜘蛛工作。

import json

from scrapy import Spider
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.linkextractor import LinkExtractor

class NameSpider(CrawlSpider):
    name = 'name of spider'
    allowed_domains = ['allowed domains of web portal to be scrapped']
    start_urls = ['start url of of web portal to be scrapped']

    custom_settings = {
        'DOWNLOAD_DELAY': 1,
        'USER_AGENT': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
    }

    product_css = ['.main-menu']
    rules = [
        Rule(LinkExtractor(restrict_css=product_css), callback='parse'),
    ]

    def parse(self, response):
        //implementation of business logic

答案 19 :(得分:0)

对于可能遇到同样问题的人,不仅需要设置蜘蛛的name并在scrapy设置中检查SPIDER_MODULESNEWSPIDER_MODULE,如果您正在运行scrapyd服务,您还需要重新启动才能应用您所做的任何更改

答案 20 :(得分:0)

检查缩进,我的蜘蛛的类缩进了一个标签。不知何故,这使得课程无效或者其他什么。

相关问题