【问题标题】:Scrapy spider not found errorScrapy spider 未找到错误
【发布时间】:2012-04-10 05:34:12
【问题描述】:

这是带有 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'

我是否缺少一些配置项?

【问题讨论】:

    标签: python scrapy


    【解决方案1】:

    我通过从目录运行蜘蛛解决了这样的问题,但只是从“spider.cfg”文件所在的位置,而不是完整的路线,在你的情况下,campSpider.py 位于(caps\caps \spiders\campSpider.py)。

    好吧,只用大写字母试试\

    我也建议从这个地方运行命令:scrapy list

    这将显示您创建的蜘蛛。

    希望对大家有帮助。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        只是在这里添加我的学习点。

        我的爬虫正在工作,它突然开始报错并来到这里寻找解决方案。

        无法修复它,所以检查了我的更改,然后我愚蠢地创建了一个新变量“名称”。

        这会导致 scrapy 也找不到蜘蛛名称。

        【讨论】:

        • 我定义了一个名为“name”的静态方法...同样的效果。谢谢,如果不是你,我会想知道我的蜘蛛在接下来的 10 个小时左右出了什么问题
        【解决方案4】:

        我通过修复我的文件名来修复。

        原来是my.spider.py。已修复,myspider.py

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

        【讨论】:

          【解决方案5】:

          确保在命令行中使用相同的名称属性来运行蜘蛛...

          scrapy 抓取

          【讨论】:

          • 这是一个老问题,有明确定义和接受的答案。您的答案缺乏更多细节。不要误会我的意思,我从评论队列中得到了你的帖子。我试图帮助您了解本网站的运作方式。长话短说,这个答案对讨论没有多大意义,您可以考虑删除它。
          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

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

            虽然它默认为False,但请检查它是否设置为True - 尝试将其设置为默认值

            LOG_STDOUT = False

            这是logged issue

            【讨论】:

              【解决方案8】:

              另外,您可能还没有部署您的蜘蛛。所以首先使用“scrapyd”启动服务器,然后使用“scrapyd-deploy”进行部署,然后运行命令。

              【讨论】:

                【解决方案9】:

                如果你正在学习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下自己创建spiders目录,就会出现这个错误

                【讨论】:

                  【解决方案10】:

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

                  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}
                  

                  所以在这种情况下,name = 'quotes'。 然后在命令行中输入: '抓取引用'

                  那是我的问题。

                  【讨论】:

                    【解决方案11】:

                    我也有这个问题,结果是相当小。确保你的类继承自 scrapy.Spider

                    my_class(scrapy.Spider):
                    

                    【讨论】:

                      【解决方案12】:

                      在我的例子中,我设置了“LOG_STDOUT=True”,当您使用“/listspiders.json”查找蜘蛛时,scrapyd 无法将结果返回到 json 响应。取而代之的是,结果将打印到您在 scrapyd 的 default_scrapyd.conf 文件中设置的日志文件中。 所以,我像这样更改了设置,并且效果很好。

                      LOG_STDOUT = False
                      

                      【讨论】:

                        【解决方案13】:

                        没有项目使用 runspider 和 fileName 与项目使用爬网和名称 示例:C/user> scrapy runspider myFile.py

                        【讨论】:

                          【解决方案14】:
                          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
                          

                          【讨论】:

                            【解决方案15】:

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

                            【讨论】:

                              【解决方案16】:

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

                              就我而言,我是直接从另一个项目中复制代码而忘记从蜘蛛模块导入中更改项目名称

                              【讨论】:

                                【解决方案17】:

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

                                【讨论】:

                                  【解决方案18】:

                                  你必须给你的蜘蛛取个名字。

                                  但是,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 上运行蜘蛛应该没有问题。

                                  【讨论】:

                                    【解决方案19】:

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

                                    【讨论】:

                                      【解决方案20】:

                                      还要确保你的项目没有被称为scrapy!我犯了这个错误并重命名它解决了问题。

                                      【讨论】:

                                      • 很高兴我在花了几个小时试图弄清楚之前看到了这个:P
                                      • 确保你的python文件也没有命名为scrapy.py
                                      【解决方案21】:

                                      确保您已设置蜘蛛的 "name" 属性。 示例:

                                      class campSpider(BaseSpider):
                                         name = 'campSpider'
                                      

                                      没有 name 属性,scrapy manager 将无法找到您的蜘蛛。

                                      【讨论】:

                                      • 根据tutorial,名称可以不用Spider。但是类名应该!
                                      【解决方案22】:

                                      您是否设置了SPIDER_MODULES 设置?

                                      SPIDER_MODULES

                                      默认:[]

                                      Scrapy 将在其中寻找蜘蛛的模块列表。

                                      例子:

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

                                      【讨论】:

                                        猜你喜欢
                                        • 1970-01-01
                                        • 1970-01-01
                                        • 1970-01-01
                                        • 2010-12-18
                                        • 2020-10-03
                                        • 1970-01-01
                                        • 2019-08-08
                                        • 1970-01-01
                                        • 1970-01-01
                                        相关资源
                                        最近更新 更多