最近在抓取的時候發現單執行緒的curl採集多個網頁的時候速度特別慢,尤其是數量超過100的時候,都要幾分鐘才能獲取完畢。於是在網上找了curl多執行緒的採集方法,網上流傳的**都是不完善的,最近經過多次除錯,最終解決了,多執行緒採集獲取上百個也沒只花費10多秒。
輸入引數為url陣列,返回結果為對應的網頁原始碼陣列。
**如下:
function curl_multi($urls)
$num=count($urls);
$curl = $curl2 = $text = array();
$handle = curl_multi_init();
function createch($url)
foreach($urls as $k=>$v)
$active = null;
do while ($mrc == curlm_call_multi_perform);
while ($active && $mrc == curlm_ok)
do while ($mrc == curlm_call_multi_perform);
} foreach ($curl as $k => $v)
curl_multi_remove_handle($handle, $curl[$k]);
curl_close($curl[$k]);
} curl_multi_close($handle);
return $text;
}$urls=array('',
'','',
'','',
'','',
'');
$res=curl_multi($urls);
print_r($res);
CURL多執行緒抓取網頁
網上這類方法似乎太多了。但是總是有一些問題存在。對於多執行緒抓取,現在有如下幾種思路 1.用apache的多執行緒特性,讓php進行 多程序 操作,就像post本身一樣 2.用curl的curl multi庫 對於第一種,我還沒嘗試,因為這種製造的是偽多執行緒,也許效率會低很多,而且不好控制。第二種...
curl模擬多執行緒抓取網頁 優化
通過上篇文章清楚了通過curl multi 函式可以一次請求多個url,但是也留下了問題,就是結果要等所有資料請求結束一起返回,才能逐個處理資料。優化 使先成功請求的url先返回處理結果,而不是等著所有一起返回。修改後的模型 do if running curl multi select mh wh...
PHP中多執行緒抓取網頁
大家如果覺得好,就拿去直接用吧。param mixed string or array,引數 urlarray是要抓取的網頁 或檔案,下同 的 可以是單個 也可以是多個 組成的陣列。function multidownload urlarray self log sprintf s multi th...