php的curl多執行緒採集網頁的解決辦法

2021-06-23 07:18:22 字數 895 閱讀 1791

最近在抓取的時候發現單執行緒的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...