爬蟲專案常見問題及解決方案
最近在做一個採集國內的視訊網站內容的爬蟲專案,在開發的過程中遇到了一些典型問題,在這裡羅列下來和大家一起分享:
問題一:用什麼語言寫爬蟲最好?
關於這個問題,我無法給出正確的答案,我最終選擇的是Node.js.原因如下:
1.我們團隊對Java,Python,Node.JS都比較熟悉,但因為採集資料不少都是JSON介面,我們選擇了和JSON最融洽的Node.JS.
2.Node.JS不是天然的多執行緒或協程的解決方案,採集的效率不高?這裡我是這麼理解的,Node.JS是天生的非同步程式設計模型,我們的採集最大多數的時間還是用在網路上,在這段時間可以同時發起多個HTTP請求,並等待最終的結果,CPU利用率並不需要太高,所以這一點來看,Node.JS並沒有什麼劣勢。
3.Java,Python都有完善的爬蟲框架,為什麼不用?我們這個專案算是定向採集,非廣度優先,我們梳理完需求,發現我們最基礎的需求,只是 能使用代理,能重試連線,能設定超時,能處理異常,而這些問題在Node.JS裡,requestretry這個庫都已能解決,所以我們並不需要一個大而全的框架,處理佇列,分散式等問題,選一個最熟悉的能用的才是最合適的
問題二:用什麼資料庫最好?
我們最終選擇的是MongoDB,但這不是最好的選擇
1.為什麼拋棄Mysql之類的關係型資料庫?
爬蟲的結果五花八門,但我們後期要對資料進行清洗,需要更為視覺化的資料結構,MongoDB之類的Document型資料庫會更加易用。同時,因為專案的需求後期可能會變更,我們會把原始資料儘可能完整的儲存起來,以供後面的需求,MongoDB強大的文件查詢能力,可以為後期的清洗省很多事
2.為什麼不用elasticsearch,Hadoop?
elasticsearch看起來是個不錯的選擇,它是一個具備很強內容檢索能力的搜尋方案,後期,我們可以很方便的為視訊的內容打標籤。但它對我們來說太重了一些,我們並沒有用到它的30%的功能
Hadoop也是這幾年很牛很火的大資料儲存和檢索的解決方案。同樣的,它依然太重了,對我們來說。
我們每天入庫700萬條記錄,這個其實壓根算不上大資料,殺雞何必用牛刀,而且elasticsearch,Hadoop如果不做叢集,就讓自已都產生內疚“這麼牛的東西,你只單機跑,丟人不”?所以我們只用了MongoDB,做主備就結束了,因為清洗完的資料,已被移走了。
3.MongoDB為什麼不是最好的選擇?
眾所周知,MongoDB是記憶體對映型的文件資料庫,一般意義上理解就是“吃記憶體”。我們採集來的原始資料,也會被對映到記憶體中,這是很浪費的,因為我們只需要當天夜裡清洗完之後就不再需要這些原始資料。而隨著採集的資料不斷增加,記憶體佔用會越來越高。我們正在計劃往LevelDB遷移。LevelDB是基本Google的BigTable發展出來的硬碟型資料庫,對於記憶體的利用會更高效一些,雖然它的查詢能力並不如MongoDB,但我們畢竟不是實時型的應用。
問題三:爬蟲代理
不少的平臺都有反爬蟲的方案,無非是限制帳號訪問次數或限制ip的訪問頻次,後者居多。
最開始的時候,我們選擇了網上的收費http代理,百度搜了一個叫全網代理IP的平臺,網址是http://www.goubanjia.com/,但實際使用中,可以說非常的垃圾。提供100個http代理,只有3,5個能用的,而且速度很慢,同時它們網站訪問慢如龜速,客服態度也不行,只要在群裡反饋就直接踢人。後來,換了一家叫快代理的,速度並沒有好多少。結論:“網上買http代理絕對不是爬蟲代理的好方案”。
最後我們找到了解決辦法:
現在許多雲主機服務商,都有彈性IP的功能,就是說,你可以申請N多個IP,一個月只需要基本使用費20多塊錢,在爬蟲過程中,用雲平臺的介面,換ip去採集,高速穩定。
相關文章
- 爬蟲常見問題及解決方式爬蟲
- 軟體專案管理常見問題及解決方案專案管理
- 常見問題及解決方案
- WordPress:常見問題及解決方案
- 快取常見問題及解決方案快取
- Kafka常見的問題及解決方案Kafka
- Python爬蟲程式設計常見問題解決方法Python爬蟲程式設計
- 常見問題及解決
- 爬蟲常見錯誤程式碼及解決措施爬蟲
- 專案經理如何有效管理專案進度?專案管理3大常見問題及解決方案專案管理
- 物聯網路卡常見問題及解決方案
- CrashSight 接入上報常見問題及解決方案
- 【FAQ】推送服務常見問題及解決方案
- iPhone 6/Plus常見使用問題及解決方案iPhone
- Q9使用常見問題及解決方案
- Git常見問題及解決Git
- SAP質量管理模組常見問題及解決方案
- Android應用安全常見問題及解決方案Android
- git 常見問題的解決方案Git
- Nacos 常見問題及解決方法
- UltraEdit常見問題及解決教程
- 網路爬蟲編寫常見問題爬蟲
- 【FAQ】整合分析服務的常見問題及解決方案
- Java™ 教程(常見問題及其解決方案)Java
- 使用NDK編譯含JNI的Android專案常見問題解決方案編譯Android
- WIN 8.1使用常見問題及解決
- Hadoop常見問題及解決方法Hadoop
- KMP常見問題及解決方法【Z】KMP
- Solaris 常見問題及解決方法(轉)
- python爬蟲常見的那點問題!Python爬蟲
- 網路爬蟲常見問題(個人總結)爬蟲
- h5移動端常見的問題及解決方案H5
- 常見網站反爬蟲的解決措施網站爬蟲
- 爬蟲中代理IP的常見方案爬蟲
- JAVA常見中文問題的解決方案(轉)Java
- 新手linux系統常見問題解決方案Linux
- As常見問題解決方法
- git常見問題解決Git