本示例使用phpspider作為爬蟲,抓取了華爾街見聞部分欄目文章,下面是具體的實現過程。
phpspider 文檔:https://doc.phpspider.org/demo-start.html
第一步:使用composer下載phpspider,命令如下:
1 composer require owner888/phpspider
生成的composer.json文件內容如下
1 { 2 "require": { 3 "owner888/phpspider": "^2.1" 4 } 5 }
第二步:在composer.json文件的同級目錄下,創建spider.php腳本文件,內容如下:
1 <?php 2 require './vendor/autoload.php'; 3 4 use phpspider\core\phpspider; 5 /* Do NOT delete this comment */ 6 /* 不要刪除這段注釋 */ 7 //看了一下源代碼,作者將這注釋寫到構造函數中了,所以尊重作者意願,沒有去掉,去掉會報錯。 8 $configs = array( 9 'name' => '華爾街日報', 10 'domains' => array( 11 'wallstreetcn.com', 12 ), 13 'scan_urls' => array( 14 'http://wallstreetcn.com/' //華爾街見聞網址 15 ), 16 'content_url_regexes' => array( 17 "http://wallstreetcn.com/articles/\d+" //華爾街見聞網站文章url模式 18 ), 19 'fields' => array( 20 array( 21 // 抓取內容頁的文章內容 22 'name' => "article_content", 23 'selector' => "//*[@class='node-article-content']", //文章內容區域class 24 'required' => true 25 ), 26 // 抓取內容頁的文章題目 27 array( 28 'name'=>'article_title', 29 'selector'=>"//*[@class='article__heading__title']", //文章題目區域class 30 'required'=>true 31 ), 32 //抓取內容頁文章時間 33 array( 34 'name'=>'article_time', 35 'selector'=>"//*[@class='meta-item__text']", //文章發布時間區域class 36 'required'=>true 37 ), 38 ), 39 //腳本輸出類型,輸出到數據庫 40 'export'=>array( 41 'type'=>'db', 42 'table'=>'articles' //存放文章的數據表 43 ), 44 //數據庫連接配置 45 'db_config'=>array( 46 'host'=>'127.0.0.1', 47 'port'=>3306, 48 'user'=>'mysql', //連接數據庫的用戶名,根據自己環境定義 49 'pass'=>'123456', //連接數據庫的密碼,根據自己環境定義 50 'name'=>'test' //存放的數據庫 51 ), 52 53 ); 54 55 56 $spider = new phpspider($configs); 57 $spider->start();
第三步:創建文章表articles,SQL語句如下:
1 mysql> show create table articles \G 2 *************************** 1. row *************************** 3 Table: articles 4 Create Table: CREATE TABLE `articles` ( 5 `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 6 `article_content` text NOT NULL, 7 `article_title` varchar(255) NOT NULL DEFAULT '', 8 `article_time` varchar(64) NOT NULL DEFAULT '', 9 PRIMARY KEY (`id`) 10 ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 11 1 row in set (0.00 sec) 12 13 mysql>
第四步:命令行下運行腳本spider.php
php spider.php
如下圖示:
速度還可以,只開啟一個任務,三分鍾左右就抓取了100文章,如果覺得慢,可以多開幾個任務,在spider.php中config數組中配置
注意第一次測試的時候,articles表中article_content使用的類型是varchar,入庫后發現文章內容都被截斷了,只有部分,后來改為text類型就完整存放下了。
下面是數據抓取入庫后的部分截圖: