首頁 後端開發 php教程 php 多線程抓取網頁實例程式碼

php 多線程抓取網頁實例程式碼

Jul 11, 2017 pm 02:47 PM
php 程式碼 實例

多執行緒(英文:multithreading),是指從軟體或硬體上實作多個執行緒並發執行的技術。具有多線程能力的電腦因有硬體支援而能夠在同一時間執行多於一個線程,進而提升整體處理效能。具有這種能力的系統包括對稱多處理機、多核心處理器以及晶片級多處理(Chip-level multithreading)或同時多執行緒(Simultaneous multithreading)處理器。 [1]  在一個程式中,這些獨立運作的程式片段叫作「執行緒」(Thread),利用它程式的概念就叫作「多執行緒處理(Multithreading)」。具有多執行緒能力的電腦因有硬體支援而能夠在同一時間執行多於一個執行緒(台灣譯為「執行緒」),進而提升整體處理效能。

PHP 利用 Curl Functions 可以完成各種傳送檔案操作,例如模擬瀏覽器發送GET,POST請求等等。

受限於php語言本身不支援多線程,所以開發爬蟲程式效率並不高,這時候往往需要 要藉助Curl Multi Functions 它可以實現並發多線程的訪問多個url位址。既然Curl Multi Function如此強大,能否用Curl Multi Functions 來寫並發多線程下載文件呢,當然可以,下面給出我的代碼:
代碼1:將獲得的代碼直接寫入某個文件

 程式碼如下:

<?php 
$urls = array( 
'http://www.php.cn/', 
'http://www.baidu.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.php.cn/', 
'http://www.baidu.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 多線程抓取網頁實例程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南

CakePHP 專案配置 CakePHP 專案配置 Sep 10, 2024 pm 05:25 PM

CakePHP 專案配置

CakePHP 日期和時間 CakePHP 日期和時間 Sep 10, 2024 pm 05:27 PM

CakePHP 日期和時間

CakePHP 檔案上傳 CakePHP 檔案上傳 Sep 10, 2024 pm 05:27 PM

CakePHP 檔案上傳

CakePHP 路由 CakePHP 路由 Sep 10, 2024 pm 05:25 PM

CakePHP 路由

討論 CakePHP 討論 CakePHP Sep 10, 2024 pm 05:28 PM

討論 CakePHP

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發

CakePHP 快速指南 CakePHP 快速指南 Sep 10, 2024 pm 05:27 PM

CakePHP 快速指南

See all articles