@
yakczh 这个..... 上面只是一个基本框架
实际上确实碰到你说的情况,所以数据分析也分步骤的,并且队列也有多个分别对应每个步骤
或者在单个队列里面对的数据进行标记,表示它是那个站,哪个步骤的待处理信息
比如第一步,得到某个列表页,得到的url进入第二步的待抓取队列
第二步分析目标页,如果内容全了就ok,不全就增加步骤
所有步骤走完了才得到完整信息,中间某个步骤失败了,数据就是不完整的。
但是不管多少步骤,抽象出来每一步就是简单的 抓取->分析
“抓取”比较简单,就是准备任务扔给gearman,除非某些抓取需要带上特殊条件而需要一个特别点的实现
“分析”就是要针对不同站,实现每一个步骤的分析过程了
增加新的抓取目标站,就是做3件事情:
1. 定义新的站点,和步骤标记
2. 实现新的“抓取”,如果没有特殊性,可以用通用的
3. 实现新的“分析”
至于parser的实现,那就五花八门了,正则、DOM、json、甚至node.js解jsonp回掉数据,取决于目标站变态程度
目前我们实际用的就是这么个架构和流程,
rabbitmq中差不多有7G的消息队列,没办法抓取速度永远赶不上分析速度。
有时候内存吃紧,只能“忍痛”从队列中砍掉一大片
另外一点就是:如果存在多个步骤,那么后面步骤的抓取url要放入优先级高的队列,优先处理,要不然排到猴年马月也轮不上它