scrapy shell list crawl 命令行无显示退出 no echo quit scrapy 踩坑

一、问题描述

博主在搞一个scrapy 爬虫项目时,前几天一直正常,但某一天开始,运行 scrapy shell 或者 scrapy list 或者 scrapy crawl 之类命令时,完全没有显示退出!!没报任何错误!! 我开始时怀疑是不是软件出错,但重装scrapy还是不行,并且不在项目目录下执行时执行scrapy shell 也是没有问题的,这是怎么回事呢??

全网找了N多资料, 都没有找到答案,搞了很长时间都未能解决,最后数日痛苦查找,终于发现问题所在!

二、问题原因

1.背景知识

    scrapy 项目比如说scrapy_project目录下,有个也叫scrapy_project目录,这个目录下有个spider 的目录,里面就是真正运行的爬虫,类似如下结构
scrapy_project
----scrapy_project
--------spider


2.问题真正原因:

scrapy 命令有两种运行模式,目录模式 和 非目录模式,当我们敲命令,终端当前目录:

  •     不在项目目录时

    这时候属于“无项目模式”,这个时候 scrapy shell正常运行,scrapy list 则正确报错说无项目

  •     在项目目录时(项目目录包含scrapy.cfg文件)时

    这时候就是“项目”模式了,项目将会读取scrapy.cfg中的配置设置环境。这时比如说敲你 scrapy list, scrapy将检索 spider目录下的爬虫,检测爬虫是否有错误,注意是每一个!如果你爬虫spider类中有类变量赋值之类的语句,会执行,如果执行出错,则会报错!问题是,假如你在这段类似赋值的语句中有 try catch 之类语句捕获了这个报错,那你赋值过程即便有错都不显示,那你麻烦了!这将会导致scrapy list 直接退出,无任何显示!爬虫菜鸟----我的爬虫就是这样,赋值过程出错了并catch了这个错误,导致错误无法发现。
    好吧,这个还算比较容易理解的,毕竟要list肯定要检查爬虫嘛
    但是,假如你执行 scrapy shell 命令,你以为这个只是开个shell而已,是跟具体爬虫无关的,那你就错了,但scrapy 竟然也跟上面一样,也会逐一检查spider目录下爬虫是否正确,逐一去执行类似类变量赋值的语句!这个多余动作让人难以理解,也正是我踩坑的原因!

三、解决办法

简单,确认每个爬虫是否正确。如果你的爬虫有类似类赋值的语句,要确认是否正确,而且要确认是否有错误捕捉而无显示的!

爬虫菜鸟踩坑记,估计很少人会有这么“高端”的错误吧,不过记下来供不幸踩坑的你看看。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值