簡體   English   中英

Python和網絡抓取性能

[英]Python & web scraping performance

我正在嘗試執行一些基於Python的Web抓取,其中執行時間非常關鍵。

我現在嘗試了phantomjs,selenium和pyqt4,並且所有三個庫都給了我類似的響應時間。 我會發布示例代碼,但是我的問題會影響所有這三個代碼,因此我認為問題可能出在共享依賴項上,或者在我的代碼之外。 在大約50個並發請求中,我們看到響應時間發生了巨大的分離。 取回所有50頁大約需要40秒,而隨着頁面需求的增加,該時間將成倍地變慢。 理想情況下,我希望在大約10秒鍾內找到200多個請求。 我使用了多重處理來生成phantonjs / pyqt4 / selenium的每個實例,因此每個url請求都獲得了它自己的實例,這樣我就不會被單線程阻塞。

我不認為這是一個硬件瓶頸,它在32個專用cpu內核上運行,總共有64個線程,並且cpu的使用率通常不會超過10-12%。 帶寬也相當合理地位於我的總吞吐量的40-50%左右。

我已經閱讀了有關GIL的信息,我相信我已經解決了使用多處理的問題。 網絡爬網本身就是一種緩慢的事情嗎? 我應該停止期望在約10秒內拉出200個網頁嗎?

我的總體問題是,高性能網頁抓取的最佳方法是什么,其中要求評估網頁上的js?

“必須在網頁上評估js” <-我認為這是您的問題。 只需下載50個網頁就可以並行處理,並且只需要最慢的服務器響應時間即可。 現在,並行生成50個JavaScript引擎(這基本上就是我想您正在做的事情)以在每個頁面上運行腳本是另一回事。 想象一下同時啟動50個chrome瀏覽器。

無論如何: 剖析並測量應用程序的各個部分,以找出瓶頸所在。 只有這樣,您才能看到您是在處理I / O瓶頸(聽起來不太可能),CPU瓶頸(很有可能)還是在序列化內容的某個地方使用了全局鎖(也可能,但是如果沒有發布任何代碼,就不可能說)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM