維護人員近期反應我寫的爬取某**資料的程式執行比較慢,看了一下執行爬蟲的機器的狀態,磁碟io 100%了,於是想優化一下,減少磁碟io,關於減少磁碟io的最容易想到的方法就是記憶體緩衝區,我原來的程式設計的是每抓一條資料都會插入資料庫或者更新資料庫對應的資料,由於資源有限,資料庫和爬蟲程式都放在了一台機器上(更坑爹的是機器還很爛),多個城市的爬蟲程式一起執行的話,磁碟的io明顯就捉急了。具體的方案:
用乙個list陣列用來緩衝爬取的資料,暫定緩衝1000條資料(具體應該緩衝多少再一次提交能達到最佳效能這個就需要測試了),緩衝區滿了就一次性提交給資料庫去處理(拷貝該list單獨開乙個執行緒去提交資料庫同時清除緩衝list重新接受新資料?還是在當前執行緒中提交緩衝list給資料庫處理等處理完後再清除緩衝list繼續接受後續資料?前者占用更多的記憶體但提高了效率,後者則反之,先用後者把。),待資料庫處理完後,list.clear()清楚掉緩衝區的資料,準備接受後面的資料。這樣1000條資料就出發一次磁碟io,比原來的每一條資料觸發一次磁碟io的效率應該會高不少。
總結:以前總是會去考慮記憶體的不足,以後也應該考慮考慮磁碟io資源的緊張了。
爬蟲程式的優化策略
1 注意很多 可以先用 ip ua ua庫隨機提取 訪問,之後會返回來乙個cookie,那ip ua cookie就是一一對應的,然後用這個ip ua和cookie去採集 這樣效果會比較好 2 有些 反爬取的措施應該比較強的。訪問之後每次清除快取,這樣能有效規避部分 的檢測 但是有些 更嚴格的判斷,...
優化爬蟲程式時需要注意哪幾點?
1.採集模組 2.資料分析模組 由於網路採集存在各種不確定性,資料分析部分在根據需要做好資料解析之後,要做好異常處理及定位重啟功能,避免出現程式異常退出或者資料採集遺漏 重複的情況。3.反爬策略模組 分析目標伺服器的爬蟲策略,控制爬蟲請求頻率甚至包括驗證碼 加密資料的破解,同時使用優質 或爬蟲 比如...
程式的優化
使類 成員可訪問性最小化 介面優於抽象類 合成優於繼承 for each 優於 for 通過介面引用物件 命名規範 類用名詞 方法用動詞 每個方法只做一件事,方法引數個數不大於3 對於string 包裝類。用直接量來引用。不用new的方式建立。減少記憶體占用。string s abc 優化前 for...