在一次做網站的時候 ,需要抓取一些其他網站的新聞 ,在這里介紹一種使用curl通過鏈接的方式去獲取這個頁面的所有內容,然后再通過正則匹配獲取需要的內容。不是所有網站都能抓取需要有頁面規律才能去抓取如下圖

這種有規律的新聞列表 ,不過新聞的詳情內容需要再次單獨的去抓取,
代碼:
$url = http://xxxx; // https://xxxx要抓取的鏈接 新聞列表
$url=str_replace('&','&',$url);
header("content-type:text/html;charset=utf-8");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);//除去https里面的s
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//關閉直接輸出
$ html_data =curl_exec($ch);
curl_close($ch);//關閉會話
這里要確認是否抓取到了頁面的內容 可以打印出來看一下
如果沒有抓取到 要注意一下 頁面的編碼格式 使用iconv()轉換一下內容編碼
// $html_data=iconv('gbk', 'utf-8',$html_data);
$regular='#<h1id="activity-name">(.*?)</h1>(.*?)<spanid="post-date">(.*?)<span>(.*?)</span>(.*?)<div class="page-content">(.*?)<div class="text">(.*?)</div>#is';
preg_match_all($regular,$html_data,$connect);//進行正規匹配取得自己要的內容
//循環取出需要的內容數組
foreach($connect as $k =>$var){
if($k==2 || $k==3|| $k==5 || $k==7){
$b= array_merge(array_filter($connect[$k]));
$array[]=$b;
}
}
得到數據數組后 就可以根據需求去添加數據了
內容詳情需要抓取就獲取到新聞內容頁的鏈接 同樣使用curl去獲取信息
要注意的就是正則表達式里面的html需要跟頁面的格式一樣, 你可以去原網站點右鍵查看源代碼,查看格式, 把要抓取的html復制下來 ,如果還是有不能抓取的內容可能就是格式不正確 有可能有的地方是少空格或者多空格, 這個時候直接在標簽之間(.*?)。也可以 一點一點的匹配 看具體是哪個部分沒有匹配到。
方維網絡為客戶提供網站開發定制服務,網站制作居于LINUX+PHP+MYSQL框架,歡迎客戶咨詢我們建站熱線400-800-9385