回覆列表
-
1 # 又耳筆記
-
2 # 呱嗒
1、資料抓取和資料處理分離,使用多執行緒或多程序將兩個任務分開處理,避免互相影響
2、使用多執行緒在不被封鎖的情況下儘量多的抓取網頁,視資料量決定抓取的內容存放在記憶體中或硬碟中
3、使用流水線思維加多執行緒實現頁面處理流水線化,將爬蟲邏輯分為資料抓取、資料預處理,資料處理,資料儲存幾個步驟,步驟之間相互並行
4、有一個經常被忽視的地方需要注意,如果資料抓取速度過快,那麼爬蟲的瓶頸往往在cpu上,而cpu主要消耗在對html的解析上,必要時需要自己實現一個基於字串查詢的html解析器,可以消除這一瓶頸。
-
3 # 北大青鳥海南大立校區
我來總結一下三大爬蟲進階加分方向:
第一,海量分散式抓取,主要是佇列維護,和爬蟲排程,包括cookie池的維護和代理伺服器的搭建。
三,非常加分的一點,js破解,app逆向,加密演算法攻破,這些應該很大程度決定你的爬蟲工資。
四,容易被忽視的一點,程式碼的能力,也就是語言的基礎。
你可以先評估一下自己的爬蟲是io密集還是cpu密集。
io密集:程式大部分時間花在了io等待上,比如網路io,即http請求等,磁碟io,即檔案讀寫等。
cpu密集: 程式大部分時間花在了cpu計算上,比如文字處理,數值計算等。
如果是io密集,那麼你可以將這部分的功能通過執行緒池或者協程池進行併發,這樣就提升了速度。
不過這裡的網路io有個前提,你的頻寬不是你爬蟲的瓶頸。
如果是cpu密集,那麼可以把這部分工作通過程序池(多程序)進行並行處理,這樣就提升了速度。多程序則意味著你的機器是多核的。
不過還有一些地方是值得優化的,比如一些庫的選擇上,例如beautifulsoup雖然很方便,但是有更快的實現方式,比如selectolax的速度要快很多。
如果你無法判斷,那麼就先多執行緒,然後多程序吧。
如果是單機解決不了,就用工作佇列吧,比如celery。多機並行,一定能提升速度,而且是水平擴充套件的,當然了,這得讓你的任務能夠分散式。