RAP工程选型

针对reallyinfo.rap采集项目


  • 到底用scrapy还是asyncio

首先,需要明确两点:其一 <scrapy~custom> <twisted~asyncio>,scrapy是个框架,其基于twisted事件循环实现;其二业务场景:爬虫。

scrapy框架,重配置,scrapy要适合社区推广使用,就得满足常见需求,其功能组件划分清晰,辅以广泛的接口支撑着庞大的用户群。对过滤器,下载器,并发控制等部件做黑盒处理,极大地降低了用户的使用门槛。如果有额外的需求,只需在知晓其data-flow的基础上配置middlewares即可,可扩展性极强。但是,成也萧何败也萧何,再复杂的爬虫,从工程化角度说,单次采集任务非常简单,有时候面对一些复杂的api进行处理的时候,例如url加时间戳,怎么做requests去重,该url请求失败之后,怎么再次去重并加时间戳?一个简单的问题,scrapy要扩展downloadmiddlewares,spidermiddlewares。scrapy能解决你这个问题,也能解决他的那个问题,但是解决每个问题都大费周章。

scrapy利用的twisted做异步事件管理器(类似python内置asyncio),目前我对复杂的twisted研究甚少,面对有些错误或者空跑不知所云。

但是scrapy也不是没有优点,首先是文档的优秀支持,其次是社区,在遇到问题时,除了自身debug外,多了外部的答案。这一点对于公司稳定的项目尤其友好。

asyncio,python内置,官方强大支持,也是我最开始接触事件循环的地方。在asyncio基础上不受框架的束缚,轻便开发爬虫是很舒服的,流程化的采集任务,丰富的并发控制,自定义的过滤器,下载器,一切都伸展自如。用同步的方式写异步代码,哪里有情况,就在哪里处理。因为爬虫面向的网站是变化的,所以爬虫的工程化实现也应该是灵活的。

目前社区对asyncio的优秀支持,包括aioredis,aiomongodb等。

说到底还是个用不用框架的问题,至于twisted,scrapy已经完全封装,使用者看不到。爬虫工程化要轻快,所以用asyncio更符合要求。

  • 用不用redis做缓存?

要不要?redis的使用场景:1. 做代理ip缓存;2. 做cookie缓存;3. 做url缓存。除了url缓存可以在采集任务中实现,其余的都需要独立于采集任务,而外部的缓存,目前理想的就是redis了。所以要不要是个硬需求。

目前做的项目中,将url缓存完全独立于采集结果。在RAP采集任务中,往往需要重新抓取某些目标,这时候在结果集中删除,留下缺口,以待抓取。所以需要将url缓存的初始化与采集结果联系起来。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值