我使用的是基於webkit的工具來構建一個用於爬網頁面的無頭瀏覽器(我需要這個是因爲我想評估在頁面上找到的JavaScript並獲取最終呈現的頁面)。但是,迄今爲止我所實施的兩種不同的系統表現出非常差的性能。我已經實現了兩個不同的系統,它們都使用的webkit作爲後端:使用webkit進行無頭瀏覽
- 使用谷歌瀏覽器:我將開始谷歌瀏覽器,並使用由Chrome用於遠程調試(debugging over wire)暴露的WebSockets每個標籤通信。這樣我就可以控制每個選項卡,加載一個新頁面,並且一旦加載頁面,我就可以獲取加載的網頁的DOM。
- 使用phantomjs:phantomjs使用webkit加載頁面並提供無頭瀏覽選項。正如phantomjs的例子中所解釋的那樣,我使用page.open打開一個新的URL,然後通過在頁面上評估JavaScript來加載頁面後獲取dom。
我的目標是儘可能快地抓取頁面,並且如果頁面在前10秒內不加載,則聲明失敗並繼續前進。我知道每個頁面需要一段時間才能加載,因此爲了增加每秒加載的頁面數量,我在Chrome中打開了許多選項卡,或者使用phantomjs啓動多個並行進程。以下是我觀察到的表現:
- 如果我在Chrome/20 phantomjs情況下,CPU使用率高達火箭開20餘個標籤。
- 由於CPU使用率高,大量頁面加載時間超過10秒,因此我的故障率更高(約80%的頁面加載請求失敗)
- 如果我打算保持失敗超過請求總數的5%,我無法每秒載入超過1個網址。
嘗試了兩種基於WebKit系統後,感覺就像性能瓶頸是WebKit渲染引擎,因此想從其他用戶在此瞭解,我可以期待抓取每秒的URL的數量。我的硬件配置是:
- 處理器:英特爾睿™i7-2635QM(1個處理器,4個內核)
- 顯卡:AMD的Radeon HD 6490M(256MB)
- 內存:4GB
- 網絡帶寬是足夠好,能夠加載頁面比我觀察到的性能更多
我想問這個郵件列表的問題是,是否有任何人使用webkit的隨機爬行網頁的經驗一套網址(比如說從twitter流中選擇10k網址),我可以合理預計每秒會抓取多少個網址?
感謝
我會在一個月左右的時間裏知道你的問題的答案:)我正在使用'Node.js'和'PhantomJS'做類似的事情(但我想評估其他的東西)。與此同時,我將從您可能得到的答案中受益! – 2012-07-15 03:33:38