我一直在嘗試從一個網站訪問一些數據。我一直在使用Python的機械化,以及用於此目的的beautifulsoup4包。但是由於我必須解析的頁面數量大約在100,000頁以上,因此使用單個線程進行單頁處理並不合理。我嘗試了python的EventLet包來獲得一些併發性,但沒有產生任何改進。任何人都可以建議我可以做的其他事情,或者應該做些什麼來加速數據採集過程?刮網站
刮網站
回答
我要我自己的答案報給this question因爲它完全適合在這裏也:
針對您的特殊任務,我會建議multiprocessing worker pool。您只需定義一個池,然後告訴它要使用多少個進程(默認情況下每個處理器核心一個)以及要在每個工作單元上運行的函數。然後,您準備好每個工作單元(在您的情況下,這將是一個URL列表)並將其提供給工作池。
您的輸出將是您的原始數組中每項工作的工作函數的返回值的列表。所有酷酷的多處理善良都會在後臺發生。當然,還有其他與工作人員合作的方式,但這是我最喜歡的方式。
快樂的多處理!
謝謝Codemonkey。它給了我重大的改進。一個問題是,工人池中的進程是否同步了?我的意思是,我必須填寫表格,提交,等待結果,然後將這些結果寫入文件。該形式具有線性增長的場,即1,2,3,4,...,n。我會喜歡我的程序以任何方式檢索它,但是當將結果粘貼到文件中時,它必須按照時間順序執行。有什麼幫助嗎? – user1343318 2012-08-01 21:31:13
是的,你會以原始順序收到你的工作池地圖的輸出。例如,如果你的數據看起來像'[1,2,3,4,5]',而你的工作函數看起來像這樣'def work(x):return x * 2',那麼你的輸出就是'[2,4 ,6,8,10]'等等。 – Hubro 2012-08-01 21:56:25
- 1. 網站刮圖
- 2. 刮javascript網站
- 3. 刮Flash網站
- 4. 的Youtube網站刮
- 5. 刮一個網站
- 6. 刮動態網站
- 7. [R刮ASPX網站
- 8. 刮壞HTML網站
- 9. 將Jaunt的網站刮板能夠刮這個JavaScript網站
- 10. python - 使用BeautifulSoup網站刮ajax網站
- 11. Java-JSoup刮動態網站
- 12. 從網站刮表數據
- 13. 無法刮取HTML網站?
- 14. 亞馬遜網站刮
- 15. 刮網站使用PHP
- 16. 網站刮板 - 輸出
- 17. Scrapy不能刮網站
- 18. 刮網站,安全登錄
- 19. 如何刮掉.jsp網站?
- 20. 網站搜索和刮012
- 21. Python從網站刮表?
- 22. 用Nokogiri刮一個網站
- 23. WP8 C#網站刮登錄
- 24. 如何刮AJAX網站?
- 25. 用查詢刮網站
- 26. 用Python刮新聞網站
- 27. 解析HTML的網站刮
- 28. 刮網站使用JavaScript
- 29. 刮網站eith POST方法
- 30. Scrapy - 抓取和刮網站
試過多處理模塊? – 2012-08-01 08:26:26
嘗試[Scrapy](http://scrapy.org/)搜索網頁 – warvariuc 2012-08-01 09:26:16
warwaruk,我在某處閱讀Scrapy不會讓你填寫表格。因爲這個原因,我放棄了它。 – user1343318 2012-08-01 21:28:26