PHP是一種廣泛使用的服務端編程語言,具有易學、高效、開放源代碼等優點。而在PHP的基礎上,有另一種工具,叫做phpspide,它是基于PHP原生語言的面向過程爬蟲框架,可以方便快捷地抓取網站數據。接下來,我們將詳細介紹phpspide的特點、使用方法以及示例應用。
phpspide的特點:
1.輕便:phpspider是一個不依賴任何第三方庫,無需安裝http服務,無需搭建數據庫的超輕量級php爬蟲框架。
2.高效:使用phpspider是高效的,因為它遵循多進程爬蟲模型。它能夠同時抓取多個任務,每個任務都由一個子進程獨立處理,可以加快采集效率。
3.穩健:使用phpspider是穩健的,因為它內置斷點續采集的支持。斷電、中斷等意外情況發生時,它不會漏采,也不會采重復的數據。
4.靈活:使用phpspider是靈活的。phpspider采用命令行控制,用戶可以完全掌控程序的執行過程,控制任務并發數,設置cookie,設置代理等。
5.易用:使用phpspider是易用的,因為它使用起來簡單,api文檔詳盡,并附帶完整的示例代碼。
phpspide的使用方法:
1.安裝phpspide:采用composer安裝,執行命令如下:
composer require phpspider/phpspider
2.編寫phpspider爬蟲腳本:phpspider爬蟲腳本遵循單獨建立php文件的方式。phpspider爬蟲腳本應從Spider類繼承并重寫相關抽象方法。例如:
require_once __DIR__ . "/vendor/autoload.php"; use phpspider\core\phpspider; class MySpider extends phpspider{ public function run(){ //請認真編寫你的爬蟲邏輯,以下僅作參考 $this->on_start = function(){ $this->add_url("http://www.baidu.com/"); }; $this->on_extract_field = function($fieldname, $data, $page){ if($fieldname == 'title'){ $data = '自定義標題'; } return $data; }; parent::run(); } } $spider = new MySpider(); $spider->start();
(代碼請使用pre標簽插入)
3.啟動phpspider:執行如下命令啟動:
php myspider.php run
以上三步即可開啟自己的爬蟲爬取相關數據了。
phpspide的示例應用: 抓取網站數據
以下示例將講述如何利用phpspider抓取簡書網的相關帖子信息,包括作者、閱讀量、點贊數以及評論內容等。腳本編寫如下:
require_once __DIR__ . "/vendor/autoload.php"; use phpspider\core\phpspider; use phpspider\core\log; use phpspider\core\db; class MySpider extends phpspider{ public function run(){ //請認真編寫你的爬蟲邏輯,以下僅作參考 $this->on_start = function(){ $this->add_url("https://www.jianshu.com/"); }; $this->on_extract_page = function($page, $data){ //抓取文章作者 if(preg_match("/\/u\/([0-9]+)?$/i", $page['url'], $user_id)){ $data['user_id'] = $user_id[1]; } //echo "##################".$page['raw']."####################"; $stats = $this->get_field($page['raw'], 'id="note-'+$data['id']+'"', 'data-stats='); $obj_stats = json_decode(html_entity_decode($stats), true); //獲取閱讀量 $data['views'] = $obj_stats['views_count']; //抓取點贊數 $data['likes'] = $obj_stats['likes_count']; //抓取評論 $msgs = $this->get_field($page['raw'], '
phpspide的特點:
1.輕便:phpspider是一個不依賴任何第三方庫,無需安裝http服務,無需搭建數據庫的超輕量級php爬蟲框架。
2.高效:使用phpspider是高效的,因為它遵循多進程爬蟲模型。它能夠同時抓取多個任務,每個任務都由一個子進程獨立處理,可以加快采集效率。
3.穩健:使用phpspider是穩健的,因為它內置斷點續采集的支持。斷電、中斷等意外情況發生時,它不會漏采,也不會采重復的數據。
4.靈活:使用phpspider是靈活的。phpspider采用命令行控制,用戶可以完全掌控程序的執行過程,控制任務并發數,設置cookie,設置代理等。
5.易用:使用phpspider是易用的,因為它使用起來簡單,api文檔詳盡,并附帶完整的示例代碼。
phpspide的使用方法:
1.安裝phpspide:采用composer安裝,執行命令如下:
composer require phpspider/phpspider
2.編寫phpspider爬蟲腳本:phpspider爬蟲腳本遵循單獨建立php文件的方式。phpspider爬蟲腳本應從Spider類繼承并重寫相關抽象方法。例如:
require_once __DIR__ . "/vendor/autoload.php"; use phpspider\core\phpspider; class MySpider extends phpspider{ public function run(){ //請認真編寫你的爬蟲邏輯,以下僅作參考 $this->on_start = function(){ $this->add_url("http://www.baidu.com/"); }; $this->on_extract_field = function($fieldname, $data, $page){ if($fieldname == 'title'){ $data = '自定義標題'; } return $data; }; parent::run(); } } $spider = new MySpider(); $spider->start();
(代碼請使用pre標簽插入)
3.啟動phpspider:執行如下命令啟動:
php myspider.php run
以上三步即可開啟自己的爬蟲爬取相關數據了。
phpspide的示例應用: 抓取網站數據
以下示例將講述如何利用phpspider抓取簡書網的相關帖子信息,包括作者、閱讀量、點贊數以及評論內容等。腳本編寫如下:
require_once __DIR__ . "/vendor/autoload.php"; use phpspider\core\phpspider; use phpspider\core\log; use phpspider\core\db; class MySpider extends phpspider{ public function run(){ //請認真編寫你的爬蟲邏輯,以下僅作參考 $this->on_start = function(){ $this->add_url("https://www.jianshu.com/"); }; $this->on_extract_page = function($page, $data){ //抓取文章作者 if(preg_match("/\/u\/([0-9]+)?$/i", $page['url'], $user_id)){ $data['user_id'] = $user_id[1]; } //echo "##################".$page['raw']."####################"; $stats = $this->get_field($page['raw'], 'id="note-'+$data['id']+'"', 'data-stats='); $obj_stats = json_decode(html_entity_decode($stats), true); //獲取閱讀量 $data['views'] = $obj_stats['views_count']; //抓取點贊數 $data['likes'] = $obj_stats['likes_count']; //抓取評論 $msgs = $this->get_field($page['raw'], '
',
'
');
$msgs_obj = json_decode($msgs, true);
$last_comment = end($msgs_obj);
$data["last_comment"] = $last_comment["note_id"] ." ==>". strip_tags($last_comment["content_html"]);
//抓取文章內容
$content = $this->get_field($page['raw'], '','
');
//過濾內容中的script腳本和文字中的亂碼字符
$format_content = preg_replace(array('/