隨著時代的發(fā)展,社會越來越信息快速化,所以信息更新非常的迅速,這讓很多站長在更新自家的網(wǎng)站信息時,顯得太浪費時間,該怎么辦呢?那就是通過采集將別家的信息錄入到自家網(wǎng)站的數(shù)據(jù)庫中,這樣做可能對網(wǎng)站的優(yōu)化會有一定的影響,但這不是我們今天討論的話題,今天就用一個示例簡單講一下網(wǎng)站采集的的過程
我們先來看下面的一個實例,這是客戶的網(wǎng)站要求采集太平洋網(wǎng)站的新聞,代碼如下圖所示(附說明):
<?php
header("content-type:text/html;charset=utf-8");//
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);//將為一個CURL會話設置選項。CURLOPT_URL參數(shù)是你想要的設置, 這是你想用PHP取回的URL地址,$url是這個選項給定的值
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);//如果有證書的https的,除去https里面的s,此句非常重要,不可刪除,否則帶有https的站點將無法打開
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//所獲的內容不輸出
$data=curl_exec($ch);//將頁面的內容賦于$data,即$data就是我們打開網(wǎng)頁后的內容代碼
$data=iconv('gbk', 'utf-8',$data);//防止中文的亂碼,做轉碼處理
curl_close($ch);//關閉cURL 會話
咱們先打開太平洋新聞網(wǎng),然后查看網(wǎng)頁源代碼,找到要采集的信息內容,截圖下圖:
根據(jù)上面的代碼,我們可以寫一個正則表達:
$path = '#<i class="lpic"><a href="(.*?)" target="_blank"><img width="200" height="150" src="//www1.pconline.com.cn/images/blank.gif" (.*?)="(.*?)" alt=""> </a>
</i>
<dl><dt><a href="(.*?)" target="_blank">(.*?)</a></dt><dd><span class="des">(.*?)</span><p class="info"><span class="channel"><a href="(.*?)" target="_blank">(.*?) </a></span><span class="date">| (.*?)</span></p></dd></dl>#is'; preg_match_all($path,$data,$arr);//正則匹配,其中$path是匹配的規(guī)則,$data是想要匹配的內容,$datapath給定正則表達式 的匹配結果并且將它們以flag指定順序輸出到$arr中.
$array = array();//初始化一個數(shù)組
foreach($arr as $k=>$v){
if($k==3||$k==4||$k==5||$k==6||$k==9){ //想要的參數(shù)有哪些
$array[$k] = $v;}}
if(!empty($array)){
$array = array_values($array);//重置數(shù)組key,讓數(shù)組的key從0開始計算,也可以不重置,但不要弄錯
}
/*
其中
$array[0] 是信息的圖片絕對地址的數(shù)組
$array[1] 是信息鏈接地址的數(shù)組
$array[2] 是信息標題的數(shù)組
$array[3] 是信息列表簡介的數(shù)組
$array[4] 是信息時間的數(shù)組
Print_r($array);根據(jù)輸入的數(shù)組信息就知道如何把數(shù)據(jù)添加到數(shù)據(jù)庫了,然后根據(jù)url再采集信息里面的詳細內容,以達到采集整條信息的完整性
*/