滿足需求:爬蟲減少重複數據、相似數據。
數據檢索效率要高
具體方案:
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 控制服務器