(6)分布式下的爬虫Scrapy应该如何做-关于打断点Debug的那些事儿

   写完了一个爬虫,最重要的就是测试,然后各种Debug,下面我用三种方式来介绍我总结出来的Debug,由浅入深的深入里面的细节部分。

 

初级的Debug

 

一般来说,当选中了一个页面,最重要的逻辑一般都包含在xpath表达式里面,所以,在这里我们可以直接scrapy shell的方式来去验证我的xpath是否正确。

 

打开CDM命令:scrapy shell http://www.cnblogs.com/ 

 

 

这里我们可以很清晰的看到scrapy shell 已经拿到返回的html,这个时候我们输入自己的xpath,就可以拿到我们想要拿到的内容,关于scrapy shell的更多详细Detail,请参考官方的文档:

 http://doc.scrapy.org/en/latest/topics/commands.html

 

 

中级的Debug

 

如果我表达式正确,想深入验证我们的爬虫的逻辑部分是否正确,那这个时候我们可以这种方式,打log,相信各位部署到生产线的程序都应该了解,这个时候在程序的部分调用自身的logger方法就可以了。

 

当我们用scrapy crawl spider的时候,这些日志就会记录在日志中,你可以保存日志文件方便你的查看。

 

高级的debug

 

  那有没有一种方法是可以很方便的监控变量信息的呢?这样可以很方便的单步到我想要的地方,也可以很方便的了解整个的流程是怎样的运行的。答案是有的,先上一下我在debug时的图:

 

准备安装pycharm,

然后在项目的根文件夹(与scrapy.cfg文件同级)夹下加入main.py这样的一个文件:

然后配置好debug的环境:

 

OK,现在点击Debug按键:

 

OK,打好断点,然后自己愉快的debug去吧。

点赞
  • yuansmin

    大神你好,请问scrapy该怎样做分布式呢?看了 scrapy_redis 但还是无从下手。。。如能为小弟解答或指点一下方向,万分感激,如能有一个demo那真是好的不要不要的。。。。小弟的邮箱是yuansmin@sina.com。[嘻嘻]

    • hi,I'm frank

      嗯,分布式的核心是将对队的处理,就是你取start_urls从一台机器中取,这样就可以多台机器run同一个spider,关于demo,等下次我更新了代码再post到日志里面你再关注一下吧。

      • yuansmin

        嗯,好的。现在是有点入门了,能多台机器同时抓取。不过对于控制这些任务,和如果其中一台宕机了的处理还不清楚,还得向大神多学阿

        • hi,I'm frank

          down机之后比较通用的做法重新在爬一次,如果经常down那就可能是代码的问题了。控制任务不难,基于scrapyd,然后以jsono数据api接口来做非常方便。

          • yuansmin

            [抱拳] 多谢指点。