我在Python中編寫了一個爬蟲,爲了使Ctrl + C不會導致我的爬蟲在下次運行時重新開始,我需要將處理deque保存在文本文件中(一個每行項目)並在每次迭代中更新它,更新操作需要超快。爲了不重新發明輪子,我問是否有一個建立的模塊來做到這一點?在文本文件中保存一個deque
1
A
回答
4
作爲一種替代方案,您可以設置退出函數,並在退出時醃出雙端隊列。
1
你應該能夠使用pickle序列化您的名單。
0
浮現在我的腦海裏有些東西:
- 保留文件處理打開(不要關閉您寫的文件,每次的東西)
- 或寫入文件中的每個n項和趕關閉信號寫當前非書面的項目
1
我不知道如果我理解正確的問題,我只是好奇,所以這裏有一些問題和建議:
你打算捕捉Ctrl + C中斷並執行雙端隊列嗎? 如果抓取程序因某種任意原因(如未處理的異常或崩潰)崩潰,會發生什麼情況?你放棄隊列狀態並重新開始? 從文檔:
注
當 程序由信號殺死不叫出口函數, 當 檢測一個Python致命內部錯誤時,或者當os._exit()叫 。
當你碰巧再次訪問相同的URI時,你會維護一個訪問列表或什麼?
我想你應該爲每個抓取的URI維護某種訪問和會話信息/狀態。 下次訪問同一個URI時,您可以使用訪問信息決定是否抓取URI。 其他信息 - 會話信息 - 對於最後一次使用該URI的會話將有助於僅拾取增量內容,如果頁面不更改,則不需要保存某些數據庫I/O成本,重複項等。
這樣你就不必擔心ctrl + C或崩潰。如果爬蟲出於某種原因失敗,可以說在爬滿60K個帖子後剩下40K的帖子時,下一次爬蟲填充隊列,雖然隊列可能很大,但爬蟲可以檢查它是否已經訪問過URI或不是,當它被抓取時頁面的狀態是什麼 - 優化 - 頁面是否需要一個新的拾取因爲它已經改變或沒有改變。
我希望這有些幫助。
相關問題
- 1. 將文本保存到一個文件
- 2. 在本地保存一個XLS文件
- 3. 如何在一個文本文件中保存多個數據
- 4. 保存在單個文本文件
- 5. 將文本保存在一個QHBoxLayout中
- 6. 將文本文件的MD5哈希保存到同一個文本文件中?
- 7. UWP在文件中保存文本
- 8. 保存在文本文件中
- 9. 在文本文件中保存列表
- 10. 如何將文本文件讀入deque
- 11. 在django中保存一個tmp文件
- 12. 解析一個文本文件,在其中添加文本,並保存到另一個文件 - Java的
- 13. 保存一個C程序輸出到一個文本文件
- 14. 將一個目錄列表保存到一個文本文件
- 15. 將一個系統調用的輸出保存在一個文本文件中
- 16. 無法保存一個文件文件
- 17. 保存一個xlam文件
- 18. 保存更改多個文本文件
- 19. 只需點擊一個按鈕,將文本文件保存在程序/ exe文件存在的文件夾中?
- 20. BufferedWriter只保存文本文件中的最後一個輸入
- 21. 如何保存一個文本文件中的列表框
- 22. 保存消息到一個文本文件中使用Ajax
- 23. 輸出保存在一個文本文件
- 24. 在本地保存文件
- 25. 保存文本文件MATLAB
- 26. 保存爲文本文件
- 27. 保存爲文本文件
- 28. 保存文本文件,它
- 29. 將一個可變文件保存到一個文件夾中
- 30. Word文檔替換文本並保存到一個新文件
正如我測試過的,atexit註冊的函數在CTRL + C和未處理的異常的情況下都被調用,並且我已經發現爲了恢復程序狀態,訪問集也需要被醃製。你的建議很有幫助,非常感謝。 – btw0 2008-12-10 17:59:31