十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
這篇文章主要介紹了如何使用PHP蜘蛛爬蟲框架來爬取數(shù)據(jù)的相關知識,內(nèi)容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇如何使用PHP蜘蛛爬蟲框架來爬取數(shù)據(jù)文章都會有所收獲,下面我們一起來看看吧。
在成都做網(wǎng)站、成都網(wǎng)站建設中從網(wǎng)站色彩、結構布局、欄目設置、關鍵詞群組等細微處著手,突出企業(yè)的產(chǎn)品/服務/品牌,幫助企業(yè)鎖定精準用戶,提高在線咨詢和轉化,使成都網(wǎng)站營銷成為有效果、有回報的無錫營銷推廣。創(chuàng)新互聯(lián)專業(yè)成都網(wǎng)站建設十多年了,客戶滿意度97.8%,歡迎成都創(chuàng)新互聯(lián)客戶聯(lián)系。
我的環(huán)境是寶塔lnmp,php是5.4版本,不要用這個版本,缺各種擴展庫
錯誤1:沒有該擴展,不需要再php.ini中配置
錯誤2:缺這個擴展庫,不需要再php.ini中配置
跑跑的報這個錯:PHP Fatal error: Call to undefined function phpspider\core\mb_detect_encoding() in / on line 474
解決方法:執(zhí)行 yum install php-mbstring -y
1、在linux上跑demo。
條件:linux上要有php環(huán)境,代碼上傳上去,執(zhí)行php -f demo.php
想退出這個頁面執(zhí)行quit 或 ctrl + c
你可能會疑惑,這要跑,爬來的數(shù)據(jù)放到哪里了呢??
2、需要在$configs中加這倆個配置(參考文檔configs詳解之成員):
//日志存放的位置
'log_file' => '',
'export' => array(
'type' => 'csv',
'file' => '', //爬下來的數(shù)據(jù)放在data目錄下,目錄和文件要自己提前創(chuàng)建好
)這里是存成了csv需要下載到本地電腦上看,因為這是個excel還是下載下來方便看
當然你也可以存到數(shù)據(jù)庫等
3、下面是一個完整的實例:
3.1、思路 :具體還是要看代碼,思路只是方便理解和記憶
//這個頁面是網(wǎng)站首頁
//這個頁面是列表頁
//這個頁面是列表頁下面的頁碼
這回我們就清晰了,我們要爬取的是列表頁的數(shù)據(jù):
3.1.1、接下來設置爬取規(guī)則
3.1.2、實例化,將配置傳給這個類的構造函數(shù)
3.1.3、添加新的url到帶爬對列
3.1.4、篩選爬到的數(shù)據(jù),如標題弄出來,內(nèi)容弄出來,并組裝好數(shù)據(jù)...
3.1.5、進行入庫操作
3.2、代碼
require '';
use phpspider\core\phpspider;
use phpspider\core\requests; //請求類
use phpspider\core\selector; //選擇器類
use phpspider\core\db; //選擇器類
use phpspider\core\log; //選擇器類
$configs=array(
'name'=> '爬取新聞',
//'log_show'=> true,
//定義爬蟲爬取哪些域名下的網(wǎng)頁, 非域名下的url會被忽略以提高爬取速度
'domains'=> array(
'' //寫域名
),
//定義爬蟲的入口鏈接, 爬蟲從這些鏈接開始爬取,同時這些鏈接也是監(jiān)控爬蟲所要監(jiān)控的鏈接
'scan_urls'=> array(
''
),
//定義內(nèi)容頁url的規(guī)則
'content_url_regexes'=> array(
""
),
//爬蟲爬取每個網(wǎng)頁失敗后嘗試次數(shù)
'max_try'=> 5,
//爬蟲爬取數(shù)據(jù)導出
'export'=> array(
'type'=> 'db',
'table'=> 'pachong', //表名
),
'db_config'=> array(
'host'=> 'localhost',
'port'=> 3306,
'user'=> '改成自己的', //MySQL的賬號
'pass'=> '改成自己的', //mysql的密碼
'name'=> '改成自己的', //庫名
),
'fields'=> array(
//從列表頁開始爬
array(
'name'=> "lists",
'selector'=> "'container')]//ul//li[contains(@class,'item')]",
'required'=> true,
'repeated'=> true //寫上是數(shù)組(抓的是整個列表頁),不寫是字符串(只抓第一個)
),
),
//日志存放的位置
'log_file'=> 'data/qiushibaike.log',
//只記錄 錯誤和調試日志
'log_type'=> 'error,debug,warn,error',
//爬蟲爬取網(wǎng)頁所使用的瀏覽器類型.隨機瀏覽器類型,用于破解防采集
'user_agent'=> array(
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36",
"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13G34 Safari/601.1",
"Mozilla/5.0 (Linux; U; Android 6.0.1;zh_cn; Le X820 Build/FEXCNFN5801507014S) AppleWebKit/537.36 (KHTML, like Gecko)Version/4.0 Chrome/49.0.0.0 Mobile Safari/537.36 EUI Browser/5.8.015S",
),
//爬蟲爬取網(wǎng)頁所使用的偽IP。隨機偽造IP,用于破解防采集
'client_ip'=> array(
'192.168.0.2',
'192.168.0.3',
'192.168.0.4',
),
);
$spider=new phpspider($configs);
//爬蟲初始化時調用, 用來指定一些爬取前的操作
$spider->on_start=function($spider)
{
requests::set_header("Referer", "");
};
//在爬取到入口url的內(nèi)容之后, 添加新的url到待爬隊列之前調用. 主要用來發(fā)現(xiàn)新的待爬url, 并且能給新發(fā)現(xiàn)的url附加數(shù)據(jù)(點此查看“url附加數(shù)據(jù)”實例解析).
$spider->on_scan_page=function($page,$content,$spider){
//列表頁只采集3頁。
for($i=0;$i<3;$i++){
if($i==0){ //第一頁
$url="";
}else{ //之后的n頁
$url="";
}
$options=[
'method'=> 'get',
'params'=> [
'page'=> $i
],
];
$spider->add_url($url,$options); //添加新的url到待爬隊列
}
};
$spider->on_extract_field=function($filename,$data,$page){
$arr=[];
//處理抽取到的fields中name==lists的數(shù)據(jù)
if($filename=='lists'){
if(is_array($data)){
foreach($data as $k=>$v){
$img=selector::select($v,"");
//如果該新聞沒有圖片,就刪除這條數(shù)據(jù)
if(empty($img)){
unset($data[$k]);
}else{
$url="";
$title=trim(selector::select($v,"")); //抓列表頁的標題
//抓列表頁的圖片
if(substr(selector::select($v,""),0,1)){
$title_imgs=selector::select($v,"");
}else{
$title_imgs=$url . ltrim(selector::select($v,""),'.');
}
$title_desc=trim(selector::select($v,"")); //抓列表頁的新聞簡介
//抓文章,跳轉到內(nèi)容頁
$p='/
$title_url=selector::select($v,$p,'regex');
if(substr($title_url,0,1)=='h'){
$title_link=$title_url;
}else{
$title_link=$url . ltrim($title_url,'.');
}
$title_time=strip_tags(selector::select($v,"")); //抓列表頁的時間
//組裝數(shù)據(jù)
$arr[$k]=[
'title'=> $title,
'title_imgs'=> $title_imgs,
'title_desc'=> $title_desc,
'title_link'=> $title_link, //前往內(nèi)容頁的鏈接
'title_time'=> $title_time,
];
}
}
}
}
return $arr;
};
//入庫操作
$spider->on_extract_page=function($page,$data){
// echo "
";// var_dump($data);
// die;
//處理哪個數(shù)據(jù)
if(isset($data['lists'])){
foreach($data['lists'] as $v){
$arr=[
'title'=> trim($v['title']),
'title_imgs'=> urlencode($v['title_imgs']),
'title_desc'=> $v['title_desc'],
'title_link'=> urlencode($v['title_link']),
'title_time'=> $v['title_time']
];
//標題重復就不入庫
$sql="select count(*) as ——count—— from ——pachong—— where ——title——".$v['title'];
$row=db::get_one($sql);
if(!$row['count']){
db::insert('pachong',$arr);
}
}
$data=$arr;
}
return $data;
};
$spider->start();
3.3、表的結構
4、按照作者的思想,每次爬取之前先要測試一下,該網(wǎng)站能不能爬到(參考文檔:如何進行運行前測試)
注意:這是測試用的,該頁面請用瀏覽器直接訪問,方便查看
關于“如何使用PHP蜘蛛爬蟲框架來爬取數(shù)據(jù)”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“如何使用PHP蜘蛛爬蟲框架來爬取數(shù)據(jù)”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
文章標題:如何使用PHP蜘蛛爬蟲框架來爬取數(shù)據(jù)
分享URL:http://m.jiaotiyi.com/article/gccjpp.html