PHP利用CURL實現多線程抓取網頁或下載檔案

來源:互聯網
上載者:User
PHP 利用 Curl 可以完成各種傳送檔案操作,比如類比瀏覽器發送GET,POST請求等等,然而因為php語言本身不支援多線程,所以開發爬蟲程式效率並不高,不過可以用 Curl ,藉助Curl 這個功能實現並發多線程的訪問多個url地址以實現並發多線程抓取網頁或者下載檔案

PHP 利用 Curl Functions 可以完成各種傳送檔案操作,比如類比瀏覽器發送GET,POST請求等等,受限於php語言本身不支援多線程,所以開發爬蟲程式效率並不高,這時候往往需 要藉助Curl Multi Functions 它可以實現並發多線程的訪問多個url地址。既然 Curl Multi Function如此強大,能否用 Curl Multi Functions 來寫並發多線程下載檔案呢,當然可以,下面給出My Code:

代碼1:將獲得的代碼直接寫入某個檔案

<?php $urls = array(   'http://www.sina.com.cn/',   'http://www.sohu.com/',   'http://www.163.com/' ); // 設定要抓取的頁面URL     $save_to='/test.txt';  // 把抓取的代碼寫入該檔案     $st = fopen($save_to,"a");  $mh = curl_multi_init();     foreach ($urls as $i => $url) {   $conn[$i] = curl_init($url);   curl_setopt($conn[$i], CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)");   curl_setopt($conn[$i], CURLOPT_HEADER ,0);   curl_setopt($conn[$i], CURLOPT_CONNECTTIMEOUT,60);   curl_setopt($conn[$i], CURLOPT_FILE,$st); // 設定將爬取的代碼寫入檔案   curl_multi_add_handle ($mh,$conn[$i]);  } // 初始化     do {   curl_multi_exec($mh,$active);  } while ($active); // 執行     foreach ($urls as $i => $url) {   curl_multi_remove_handle($mh,$conn[$i]);   curl_close($conn[$i]);  } // 結束清理     curl_multi_close($mh);  fclose($st); ?>

代碼2:將獲得的代碼先放入變數,再寫入某個檔案

<?php $urls = array(   'http://www.sina.com.cn/',   'http://www.sohu.com/',   'http://www.163.com/' );    $save_to='/test.txt';  // 把抓取的代碼寫入該檔案  $st = fopen($save_to,"a");    $mh = curl_multi_init();  foreach ($urls as $i => $url) {   $conn[$i] = curl_init($url);   curl_setopt($conn[$i], CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)");   curl_setopt($conn[$i], CURLOPT_HEADER ,0);   curl_setopt($conn[$i], CURLOPT_CONNECTTIMEOUT,60);   curl_setopt($conn[$i],CURLOPT_RETURNTRANSFER,true); // 設定不將爬取代碼寫到瀏覽器,而是轉化為字串   curl_multi_add_handle ($mh,$conn[$i]);  }    do {   curl_multi_exec($mh,$active);  } while ($active);     foreach ($urls as $i => $url) {   $data = curl_multi_getcontent($conn[$i]); // 獲得爬取的代碼字串   fwrite($st,$data); // 將字串寫入檔案。當然,也可以不寫入檔案,比如存入資料庫  } // 獲得資料變數,並寫入檔案    foreach ($urls as $i => $url) {   curl_multi_remove_handle($mh,$conn[$i]);   curl_close($conn[$i]);  }    curl_multi_close($mh);  fclose($st);  ?>

總結:以上就是本篇文的全部內容,希望能對大家的學習有所協助。

相關推薦:

PHP實現簡單線上閱讀PDF檔案

常見的php異常處理方法

PHP數組融合的兩種方法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.