網頁自動抓取和採集的效率和速度一直是個瓶頸,檢視dedecms和phpcms的採集**並測試發現不如人意。
dedecms的還算穩定,但是速度不高,它採用的方式是總分模式,在分任務執行時是順序模式,即,總控開關接受任務並安排執行段給接收分任務的**塊,然後**塊是連續式執行交給的**,執行完乙個任務後,跳轉到下乙個任務繼續執行,這樣的好處是總體可控,但是沒有有效利用資源,沒有採用併發採集,無疑對使用者來說是一程式設計客棧種時間的浪費和一定程度的失望。
phpcms2008新的採集模組,雖然華麗,模擬的是框架+js式的多執行緒,理論上效率高,但是經測試發現很令人失望,編碼問題很明顯,並且設計有點不合理,且不說時效,連完成任務都是問題。
其他的cms就不說了,沒做測試。於是自己想開發一套可行性和實效較高的採集系統,經過一下午的時間,核心**寫好了,可以併發採集網頁內容,效率還算可以sogyem,下面介紹下設計的模式:
同樣考慮到php超時的問題,於是任務分塊是必須的,為了便於把控,採用總分模式分配任務,分配後,執行模組接受任務後,併發執行任務,各管各的,基本不受相鄰任務的影響,但是發現,當任務sogyem量大時,每個任務消耗的時間將增大一定,不過總體下來,效率還是蠻高的。
總控開關整理好任務後,將任務放置任務區,然後陸續下達任務書,啟用執行**,**開始工作,完成自己的任務退出。分配任務的速度還是很快的,採用無返回資料的方式,即啟用任務即可。至於如何控制任務完成的時間,還要歸結到總控,即總控檢測任務的完成與否,回資料到瀏覽器,通知使用者。
測試環境:windows xp/ apache/2.2.9 (win32) php/5.2.6
採集**:新浪新聞
採集資料量:600條
耗時: 2分左右
操作:獲取網頁內容並獲取文章內容部分並寫入html檔案
下面是測試:
總控分配任務:
尺寸: 320 x 211
瀏覽: 1 次
點選開啟新視窗瀏覽全圖" src="" width="320" border="0">
生成的結果檔案:(通過檔名可以看出是併發採集的)
尺寸: 500 x 146
瀏覽: 1 次
點選開啟新視窗瀏覽全圖" src="" width="500" border="0">
個任務完成後通知檔案:
尺寸: 500 x 144
瀏覽: 0 次
點選開啟新視窗瀏覽全圖" src="" width="500" border="0">
本文標題: php實現高效採集(總分模式)
本文位址: /news/exp/26326.html
PHP例項 CURL實現簡單採集
在php中我們可以通過編寫curl來實現採集的功能,先分析需要採集的資料的 的特點,加入到我們的curl的屬性中來,實現我們定製採集的功能,最終得到我們需要的結果。curl的使用 preg match all array filter explode php中建立curl請求的基本步驟 1 建立乙個...
怎樣實現Singleton模式才是高效和安全的?
關於singleton的實現方式,有如下多種方式,究竟那一種是高效安全的呢?1 大家熟知的懶式單例 public class lazysingleton public static lazysingleton getinstance system.out.println instance.hashc...
php實現工廠模式
設計模式 使用php實現工廠方法模式 概要 建立型模式 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類。factory method使用乙個類的例項化延遲到其子類 gof95 結構圖 主要角色 抽象產品 product 角色 詳細產品物件共同擁有的父類或介面 詳細產品 concrete pro...