天天看點

爬蟲架構設計爬蟲架構設計前言目錄:一:簡易爬蟲二.分布式爬蟲架構三:伺服器自動擴容(程式自動增減伺服器裝置)四:反爬結束

爬蟲架構設計

前言

公司要求:需要擷取并分析資料,是以幹起了爬蟲工程師的事情,分享一下最近學習的經驗.由于團隊人手不夠,目前是自己獨自負責這部分(搭建、爬取、解析),可能會有不完善的地方,如果覺得有可以優化的地方或者是更好的方案可以私信交流。

目标:京東、考拉、淘寶、costco、amazon(自己現階段的需求就是這些了)

使用到的資料庫:mysql、mongo、redis

目錄:

1.簡易爬蟲

2.架構設計(分布式架構爬蟲)

3.伺服器自動擴容(程式自動增減伺服器裝置)

4.反爬

一:簡易爬蟲

1.使用selenium+chromedp實作浏覽器進行爬蟲。
當然如果硬要用請求去爬取而不是浏覽器也行,當稍微遇到反爬時,則會頭痛不已,因為浏覽器爬取是模拟真實請求,
而接口請求很容易被識别出來,就算沒有被識别出來,其實很多大網站的反爬,都會有加密,多層接口的過程,尤其是
在javascript層加密,那就很好玩了,恐怕不知需要花費多久才能正常爬取一個網站,當反爬邏輯一改,那就晾涼羅,代碼
也是大動,這裡不多講了,反爬部分會進行說明。

2.環境(linux)  windows也可,但沒必要,性能上無法比較。使用selenium在linux上無視窗爬取就行.

3.這邊預設是爬取網站的所有商品,是以找到目錄,擷取目錄,在解析目錄,擷取所有目錄的分類連結.

4.根據分類連結爬取所有的商品清單頁面,裡面包括分頁等等,進而就可以擷取對應的商品名稱,價格,商品詳情連結等等.
當然不同的網站的爬取細節都不同,這裡就不一一舉例了,因為隻是往大的方向說,不太了解的可以評論或私聊。
看到了就會解答。

5.和上一步一樣,詳情商品連結爬取html,進行存儲,全部存儲完,在進行解析。進而就可以擷取商品的規格以及各種詳細 
資訊

6.注意事項:頁面商品展示以及評論很多都不會直接展示出來,有一些關鍵資訊是隐藏起來的,需要頁面去觸發,有可能
是點選,也有可能是滑鼠移動就行,這個時候你調用對應的api即可.
7.此時解析出來的商品資料,就可以進行合理分析了,比如和公司商品比對,看看其他平台的商品價格趨勢、資訊、評論等.

缺點:通過這種單一腳本的方式、性能肯定是有限制的、就算開了多線程畢竟是單例模式,整個網站所有的商品爬取下
來都不知道要花多長時間,更何況還需要持續監測,監測出每個商品的變動,價格趨勢,是以這個時候就需要設計一套
分布式爬蟲架構.
           

二.分布式爬蟲架構

1.所有爬取、解析都是通過任務的方式進行操作。

2.任務關鍵字段:平台、分類、是否使用代理ip、是否産生cookie、停斷多久繼續爬取、錯誤重試次數,逾時時間、任務
狀态執行結果,任務執行進度,類型(分類、首頁、詳情)

3.用戶端、用戶端專門擷取使用者的任務然後分發給采集端進行采集。這邊擷取到的任務,在解析任務,把任務對應的爬
蟲連結都發送到消息隊列裡。消息隊列有很多選擇. kafka、rocketMq .....等等,emmm自己選吧,我目前用的就是
rocketMq,因為是阿裡雲強烈推薦的,kafka之前也用過,kafka在承受高并發場景下是特别好的,主要是我也沒有場景能直
接把消息隊列給弄挂了,是以這裡用哪個的差別其實意義不大,當然這些都可以部署,但會增加運維成本,還不如直接 
用阿裡雲的rocketMq,反正特别便宜,如果實在舍不得花那麼一點錢,那就幹脆直接用rpc通信就行了,不過後面的采
集端負載,消費會很麻煩,就看個人了吧,估計公司肯定都是走消息隊列了,去走請求、在維持負載采集、強行增加難度、
這可能是單純的想提升技術水準了吧。

4.采集端:采集端擁有N個,具體擁有多少個則需要看自己的需求量了,計算每天的采集數量,需要多少天完成,得出有多
少個采集端,采集端将會從消息隊列裡接收到一條url的采集任務,接受後進行采集進行存儲,如果臨時發現速度較慢,則
可以用任務建立伺服器、生成對應的采集端、進行采集.

5.最後就是一些細節操作了,根據任務解析等等.
           

三:伺服器自動擴容(程式自動增減伺服器裝置)

平台:阿裡雲
1.準備一台伺服器,選擇自己需要的配置資訊進行建立.(這裡選擇了centos7系統)

2.部署好這台centos7系統,把自己的程式服務部署上去

3.使用systemctl的方式,使linux系統上讓程式服務開機即啟動、以及關閉時自啟動。

4.部署對應的環境等等

5.把該伺服器打包成自定義鏡像.

6.通過自己的程式代碼建立阿裡雲ECS服務.

這樣在建立的那一刻、即程式以及自動運作,則實行了自動擴容的效果.
           

四:反爬

1.使用selenium+chromedp可以模拟使用者真實通路的效果

2.代理ip,不用代理ip很容易直接被封。

3.拼接cookie等一些攜帶請求頭,看看對應的網站有沒有一些對應的規則.

4.有些網站會出現圖檔驗證碼,拖動條等等,這裡我先簡單的描述如何解決對兩種反爬
 	1.拖動條
		以簡單的為例,比如從A點拖動到B點即可.
		擷取滾動條(根據id或者對應的屬性擷取即可),計算出滾動條的長度,算出滾動條A點的XY中心軸.
		滑鼠移動到A點的XY中心軸進行拖動,拖動具體長度即可。
		拖動的時候最好有幅度,比如速度的控制,以及上下的控制,弄點随機數就好.
 2.圖檔驗證碼
        首先擷取元素的圖檔,再将圖檔解析.
		解析通過OCR解析即可.使用google即可。
		解析後的驗證碼填入對應的文本框即可,在點選按鈕确認。
           

結束

由于時間原因,具體的實作過程就沒有寫上了,如果一一列出,恐怕就不知道多久能寫得完了,有興趣的小夥伴可以留言交流。

繼續閱讀