需求: 品牌監(jiān)控,各品牌關(guān)鍵詞在各個(gè)數(shù)據(jù)源關(guān)于此關(guān)鍵詞的數(shù)據(jù)抓取,生成protobuf數(shù)據(jù)格式的log,以小時(shí)入,并傳入bos中
思路是: 輸入關(guān)鍵詞,調(diào)用各個(gè)數(shù)據(jù)源對(duì)應(yīng)的爬蟲接口和解析方式獲得數(shù)據(jù)
框架設(shè)計(jì)思想:
爬蟲框架初期思路是實(shí)現(xiàn)解耦爬蟲流程(http請(qǐng)求,獲得響應(yīng),解析響應(yīng)體,通過管道進(jìn)行數(shù)據(jù)處理)封裝成三個(gè)對(duì)象和5個(gè)模塊,而封裝實(shí)現(xiàn)就是三個(gè)對(duì)象在5個(gè)模塊中間的方法調(diào)用,解析
對(duì)象部分:
http請(qǐng)求分別封裝request對(duì)象,response對(duì)象
request對(duì)象首先調(diào)用python爬蟲庫(kù)requests,封裝其請(qǐng)求方法和請(qǐng)求參數(shù)
流程解析部分:
request對(duì)象生成后,如果不添加異步功能,就直接用download模塊去發(fā)送request對(duì)象的(中間可以添加隨機(jī)ip,useragent,cookie等等),得到相響應(yīng)對(duì)象之后,動(dòng)態(tài)調(diào)用對(duì)應(yīng)爬蟲的解析方式去解析,最后生成最終想要的數(shù)據(jù)
詳細(xì)流程:
五個(gè)模塊, 爬蟲模塊: 起始url,解析響應(yīng)數(shù)據(jù),
調(diào)度模塊: 請(qǐng)求隊(duì)列
下載器模塊: 根據(jù)請(qǐng)求,分析請(qǐng)求的請(qǐng)求方法請(qǐng)求體生成響應(yīng)
目標(biāo)數(shù)據(jù)模塊: 定義數(shù)據(jù)格式
引擎模塊:整體邏輯驅(qū)動(dòng)
? a. 構(gòu)造spider中start_urls中的請(qǐng)求
? b. 傳遞給調(diào)取器進(jìn)行保存,之后從中取出
? c .取出的request對(duì)象交給下載器進(jìn)行下載,返回response
? d .response交給爬蟲模塊進(jìn)行解析,提取結(jié)果
? e .如果結(jié)果是request對(duì)象,重新交給調(diào)度器,如果結(jié)果是item對(duì)象,交給管道處理(中間做個(gè)判斷即可)
需要實(shí)現(xiàn)的功能有:
1 支持多種不同爬蟲,(導(dǎo)入各個(gè)爬蟲對(duì)象)
2 自動(dòng)調(diào)用對(duì)應(yīng)爬蟲解析方法(讀取框架默認(rèn)settings,再將對(duì)應(yīng)爬蟲的settings添加進(jìn)去并且覆蓋掉)
4 實(shí)現(xiàn)多線程 (for循環(huán)生成新的線程,實(shí)現(xiàn)settings控制for循環(huán)次數(shù),線程完畢后自動(dòng)生成新的線程)
5 實(shí)現(xiàn)異步(通過中間生成Queue,放入請(qǐng)求對(duì)象,多線程讀取請(qǐng)求對(duì)象)
6 實(shí)現(xiàn)速度控制 (從Queue讀取數(shù)據(jù)時(shí)可以設(shè)置時(shí)間延遲,每個(gè)spider不同)
7 中間件模塊方法拓展(添加隨機(jī)useragent,隨機(jī)ip,甚至隨機(jī)cookie)
8 流程控制 (通過框架內(nèi)spider_frame.engine實(shí)現(xiàn))
框架模型為: project(配置新爬蟲) spider_frame(通用爬蟲框架模塊)
后期會(huì)添加通用爬蟲平臺(tái)的建設(shè)功能(前端新開頁面)