满足需求:爬虫减少重复数据、相似数据。
数据检索效率要高
具体方案:
1:使用向量夹脚余弦来计算文本间的相似度,大于80%可认为数据相似度过高,不采集。
2:使用elasticsearch进行数据invert index。提高查询速度。支持分布式,可拓展。
3:使用gearman、或者twisted自己编写任务调度服务器。
twisted服务器控制器controler, 和爬虫节点 crawler_node
controler负责爬虫任务的存储,管理,分发
crawler_node爬虫节点
具体实施:
elasticsearch,使用smartcn中文分词器,利用es的自身的排序结果,先过滤一遍最相似的数据文档,再使用向量夹脚余弦进行计算。
twisted 控制器服务器,将有任务队列,任务添加入口,任务分配入口,使用post请求。并有数据存储入口。
twisted crawler node,多线程爬虫。
使用到的python模块。pyes,twisted
定义队列
class CrawlerTaskBuffer:
def __init__(self, max_queue_size) :
self.tasks=[]
self.max_queue_size=max_queue_size
def isFull(self) :
size=0
size=len(self.tasks)
return size>=self.max_queue_size
def isEmpty(self) :
return len(self.tasks)==0
def getTask(self) :
if len(self.tasks)==0:
task=None
else :
task=self.tasks.pop()
return task
def addTask(self, task) :
ret=True
self.tasks.append(task)
return ret
def pushbackTask(self, task) :
ret=True
self.tasks.insert(0,task)
return ret
controler 控制服务器