重写了一下gcrawler
去年做过一个《gcrawler:一个基于gevent的简单爬虫框架》,当时因为是模仿Scrapy的,所以整个实现其实很不gevent,太难看,并且实际上效率也不高。
这次因为要改写一个以前用Scrapy写的爬虫,于是就拿这个自己做的东西来用——去年其实也拿这个东西做过,只是有一段时间没用了。
改写了一部分以后发现原来的代码有很多改进的方面,本来想修改修改就算了,不过改了一部分以后发现还是把整个结构重新设计一下比较好。
新的结构把原来的GCrawler和Downloader合并了,做成了一个Scheduler。整个爬虫的工作流程比原来清晰很多,使用上也简单很多。
当然,这样一来就牺牲了原来Cralwer和Downloader分离时可以定制Downloader的灵活性,不过这个问题其实也不大,只需要从Scheduler里派生并override那个fetch方法,也是可以实现的。
更BT的需求还可以直接去修改Scheduler——反正也没几行代码,我大概花了一上午就写好这个版本代码的初稿。当然,现在的代码是后来在实际使用中作了很多修补工作以后的。
代码就不贴了,直接看最新的源码吧。原来那个google code的已经不更新了,因为众所周知的原因,国内使用google服务相当的不顺畅,所以目前已经搬到bitbucket。本来也想去人气更旺的github,为此我还特地装了hg-git,结果发现github也很不顺畅,于是就去了bitbucket。
bitbucket:https://bitbucket.org/raptorz/gcrawler
新的代码和原来一样是两个文件:一个是主模块文件,另一个是测试用例兼使用方法说明。
推送到[go4pro.org]