搭建易配置的分布式爬虫架构

过年之后写的第一篇。
最近需要研究一下爬虫,这次的爬虫不是简单的requests+selenium+bs4或者是scrapy就能搞定的。因为要解决爬取多站点(200+)的问题,考虑到工作量的问题,所以要搭建一个可以较为容易配置的分布式爬虫。


一、工具选择

语言:python
考察过用java的爬虫库,虽然流程原理基本相同,但是相关库,python好太多。
库:scrapy-redis
之前写的爬虫无非就是requests+selenium+bs4的组合,IP池用的第三方提供的http隧道代理,验证码上传到打码云解码返回值。之前的Facebook用了一把scrapy,但是总感觉scrapy这个框架太重,之前那种数量级的爬虫根本用不上。
这次的任务很复杂,主要难点在于爬多个站点,到时候的任务分发管理和配置难易程度是首要考虑的东西。看过pyspyder,这个库倒是很好配置,但是任务分发的支持就比较弱。所以最终选择是scrapy-redis库,就是在scrapy的基础上,很方便的实现了利用redis做任务分发。如果中间键控制好,配置多种情况,对于不同站点,就是堆工作量了。

二、流程控制

这次宜配置的框架应该做好几个点,这套框架应该就可以很流畅的运转起来了。

1. 下载器中间件

下载器中间件可以作为一个通用性组件

登录

登录如果是账号密码是较为好处理的,再麻烦一点是二维码登录,这个可以把二维码保存下来扫描就行,更麻烦一点是邮箱验证,这个就需要监测邮箱的收件,目前见过最复杂的是图片点击和移动验证,基本无解(移动验证据说有有已经破解了)。

IP池

IP代理可以考虑两种,钱多自己在云服务器上买几十个上百个实例,自己搭建一个IP池,优点是稳定,我刚才看了一下AWS如果启100个实例需要多少钱,不得不感慨,云服务商真的是太赚钱太赚钱了。如果没有钱,有专门做这个生意的IP供应商。但是,花出去的钱一定和IP的稳定性成正比。

JS模拟动作

比如说滑动个窗口什么的

cookies切换

大部分网站都是一个cookies走到底,但是有些网站cookies是变化的,这个需要随时监测。

UA池

可能是以上几点中难度最小的了。

2.爬虫中间件

如果爬虫放在服务器上,selenium用武之地不大,主要考虑抓包解析json。如果是动态页面,就需要上scrapy-splash,利用splash渲染页面再返回结果。
需要说明的是,动态页面可以归为一类,静态页面归为一类,这部分可配置的部分只有这个,所以主要工作量在于爬虫中间件。在搭建框架过程中需要好好设计。

3.数据解析与保存

scrapy的Item通过itempipeline直接存进数据库。这里有一个问题,需要记录最近一次爬虫爬取数据的日期,这样后期可以减少轮询。对于数据库的选择首选mongodb。这个组件也是公用的。

4.任务调度

主角redis登场。先说为什么会用它。
但是如果在面对一些比较大型的站点的时候,单个scrapy就显得力不从心了。要是我们能够多个Scrapy一起采集该多好啊 人多力量大。
很遗憾Scrapy官方并不支持多个同时采集一个站点,虽然官方给出一个方法:
将一个站点的分割成几部分,交给不同的scrapy去采集。
实在是蠢的一逼。因为不同scrapy进程之间数据不会共享,一个网页并不知道哪些爬了哪些没爬。解决方案是将几个scrapy的任务调度放在一个redis中,利用redis进行去重。(其实就是这么简单,我也不知道scrapy为什么不支持。)
总结一下:

  1. Scrapy-Reids 就是将Scrapy原本在内存中处理的 调度(就是一个队列Queue)、去重、这两个操作通过Redis来实现
  2. 多个Scrapy在采集同一个站点时会使用相同的redis key(可以理解为队列)添加Request 获取Request 去重Request,这样所有的spider不会进行重复采集。效率自然就嗖嗖的上去了。
  3. Redis是原子性的,好处不言而喻(一个Request要么被处理 要么没被处理,不存在第三可能)

另外,scrapy-redis还有集群版。这个后期需要好好研究一下。


爬虫框架部分就到这里,其实里面的坑还是不少,需要潜心去研究。能做好爬虫(大型)也是不用愁工作的,以后更新一下爬虫实践部分。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,980评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,422评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,130评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,553评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,408评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,326评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,720评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,373评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,678评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,722评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,486评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,335评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,738评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,283评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,692评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,893评论 2 335

推荐阅读更多精彩内容