2017-01-01 34 views
0

我正在編寫一個腳本,用於使用硒對.csv文件進行中等大小的刮擦。約15,000行,每行10列。當我進行300日行的測試時,我注意到最後,它似乎比開始運行時慢一點。這可能只是我的看法,或者我可能已經與網速有關。但我有一個想法,直到我運行csv_file.close(),文件不寫入磁盤,我假設數據全部保存在內存緩衝區或什麼?定期關閉並重新打開csv文件以減少內存負載

因此,定期關閉然後重新打開csv文件是有意義的(每個通過減少內存負載來幫助加速腳本的速度?還是有一些更大的問題,這會創建?或者是整個想法愚蠢,因爲我想象腳本變慢了嗎?300,000行的刮片產生了一個大約39kb的csv文件,這看起來並不多,但我不知道python在內存中保存這種數據是否會減慢它的速度或減慢速度

完整腳本的pastebin如果它有任何區別,請使用一些模糊處理:http://pastebin.com/T3VN1nHC *請注意腳本沒有完全完成我正在努力使它對最終用戶非常友好,所以在此時的運行時間有一些鬆散的末端仍然。

+4

爲什麼你不使用數據庫?即使SQLite比CSV文件更好。 – jonrsharpe

+0

這些信息最可能用於生成郵寄地址標籤。我以前從未使用過SQL。會有什麼真正的好處嗎? csv看起來簡單/容易,我認爲它會轉化爲更快的運行時間。考慮到我不得不用硒來刮擦網站,我正在低頭看18釐小時的垃圾桶。 – Lobsta

+0

簡單*實現*並不一定意味着*更快*。而且,如果你碰撞部分通過刮擦?下一步你對數據做什麼並不重要。 – jonrsharpe

回答

0

我經常使用Java和C#並且沒有寫入大型CSV文件的性能問題。寫入CSV或SQL或其他任何可以忽略的內容,實際上是對頁面/網站的抓取/導航。我建議你做一些額外的日誌記錄,這樣你就可以看到刮頁之間的時間和寫CSV的時間,並重新運行你的300刮測試。

如果你真的想要更快,將輸入文件分成兩部分並觸發腳本兩次。現在你以兩倍的速度跑...所以~9小時。這將是你最大的推動力。您可以多次觸發它,並輕鬆在同一臺機器上運行4+。我已經做了很多次(不需要網格)。

我唯一能想到的其他事情就是看看你的效率低​​下的方法,但運行至少兩個併發腳本將會消除所有其他的改進/效率相結合。

+0

不知道您是否過於熟悉硒,但會導致用於2個併發腳本的chromedriver.exe文件出現問題嗎? – Lobsta

+0

沒有。我正在談論使用硒。我一直都這樣使用它。你只需要爲每個腳本分割你的輸入文件,或者設置一些邏輯並使用SQL等等。 – JeffC

+0

非常好,謝謝你的這個建議,我真的不會想到這一點。森林爲樹有點情況。我正在搜索的搜索表單沒有「跳轉到...頁面」鏈接,只有下一個/上一個,因此我必須在'while current_page Lobsta