1.項目架構
2.詳細技術點
1.解析,(依賴注入)
2,使用queue隊列實現循環抓取
3.實現優先級隊列並提取接口
4.使用log4j實現配置檢查及日志打印
5.實現多線程爬蟲並提取接口
6.實現url調度器
7.使用queue隊列實現url隨機榨取
8.使用redis隊列實現url 隨機抓取
10.使用httpclient 實現模擬登錄
11.使用curator 監控爬蟲的生命周期
12.建立索引在web頁面展示
3.定時插入入口url
4.項目部署
redis solr hbase zookeeper
redis:主從結構,一主一從
solr:前期使用主從,后期由於數據增多,使用solrcloud(四個節點)
hbase:集群(五個節點)
zookeeper:集群(三-五個節點)
爬蟲程序部署(spider.jar)
spider爬蟲需要部署在多個節點上面,具體多少要根據數據量而定。
spider中現在一個包含4個入口類
1.spider:這個進程需要在每台服務器上運行
2.urlmanager:這個進程只需要在一台服務器上執行
3.spiderwatcher:這個進程只需要在一台服務器上執行
4.solrindex:這個進程只需要在一台服務器上執行
比價項目的web平台
一個節點啟動web程序即可。
5.京東數據量以及爬取時間
京東的數據量:
舉例子:數碼分類一共2074頁,每頁60個商品
2074*60=124440個商品京東里面一共有9個分類,每個分類可能商品數量不一致,在這里由於我們沒有爬取所有的數據,所以計算一個估計值。
124440*9=1119960(一百多萬條數據)
平均下載一個頁面需要100毫秒
1119960*0.1秒=31小時注意:一般一個頁面是100-200K左右,京東的頁面一個是200K左右
1119960*200/1024/1024=213G單線程的話就需要31小時,
假設部署5個節點,每個節點啟動10個線程
這樣的話就相當於有50個線程進行抓取
31/50=0.6小時=37分鍾但是還需要計算上爬取間隔時間,
假設是5秒的話
就是1119960*5秒=1555小時
1555/50=31小時
這樣的話一天都爬取不完,這樣的話就還要加節點增加到10個節點,每個節點10個線程
1555/100=15小時
6.爬蟲項目的問題
1:頻繁抓取網站Ip被封
解決方案:需要一個代理IP庫,定時更換代理Ip爬取網站,在爬取網站的時候可以設置一個睡眠時間,讓爬蟲的速度慢一點。
Ip庫,可以在網站搜集一些免費的,或者花錢買一些代理Ip。
2.針對抓取失敗url如何處理,可能由於網絡原因,第一次抓取失敗,第二次再抓取就成功了。
1:設置重試機制,如果url抓取失敗,則把這個url放回到url隊列中,重復三次,如果還是失敗,則認為是無效鏈接。
這樣的話實現比較麻煩,需要把這個失敗的url在sorted set集合中記錄一下,把每個元素的分值當成重試的次數,
大於三次的話就不把這個url放倒url鏈接庫了。
2:在這里我們直接使用httpclient的默認重試機制,默認三次,這樣就可以了3.抓取的網站模版會不定期的變動
把提取關鍵信息的表達式提取出來,保存到數據庫中,每一個網站一套規則,不能寫死在項目中,不然只要抓取的網站版本稍微變動就要重新修改發布項目。
4.抓取網站遇到的問題
有很多網站都會有一些反爬策略
大部分都是需要校驗useragent信息5:代理Ip價格
參考:1元4000個
9元包天
7.整體數據流程
8.項目部署關鍵點
在spider_web下運行solrIndex 建立索引
然后部署web項目,然后就可以訪問了。