爬蟲項目總結


1.項目架構

image

2.詳細技術點

1.解析,(依賴注入)

2,使用queue隊列實現循環抓取

3.實現優先級隊列並提取接口

4.使用log4j實現配置檢查及日志打印

5.實現多線程爬蟲並提取接口

6.實現url調度器

7.使用queue隊列實現url隨機榨取

8.使用redis隊列實現url 隨機抓取

10.使用httpclient 實現模擬登錄

11.使用curator 監控爬蟲的生命周期

12.建立索引在web頁面展示

3.定時插入入口url

image

 

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.整體數據流程

QQ圖片20150920151925

8.項目部署關鍵點

在spider_web下運行solrIndex 建立索引

然后部署web項目,然后就可以訪問了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM