在一次做網(wǎng)站的時(shí)候 ,需要抓取一些其他網(wǎng)站的新聞 ,在這里介紹一種使用curl通過鏈接的方式去獲取這個(gè)頁面的所有內(nèi)容,然后再通過正則匹配獲取需要的內(nèi)容。不是所有網(wǎng)站都能抓取需要有頁面規(guī)律才能去抓取如下圖
這種有規(guī)律的新聞列表 ,不過新聞的詳情內(nèi)容需要再次單獨(dú)的去抓取,
代碼:
$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);//關(guān)閉直接輸出
$ html_data =curl_exec($ch);
curl_close($ch);//關(guān)閉會話
這里要確認(rèn)是否抓取到了頁面的內(nèi)容 可以打印出來看一下
如果沒有抓取到 要注意一下 頁面的編碼格式 使用iconv()轉(zhuǎn)換一下內(nèi)容編碼
// $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);//進(jìn)行正規(guī)匹配取得自己要的內(nèi)容
//循環(huán)取出需要的內(nèi)容數(shù)組
foreach($connect as $k =>$var){
if($k==2 || $k==3|| $k==5 || $k==7){
$b= array_merge(array_filter($connect[$k]));
$array[]=$b;
}
}
得到數(shù)據(jù)數(shù)組后 就可以根據(jù)需求去添加數(shù)據(jù)了
內(nèi)容詳情需要抓取就獲取到新聞內(nèi)容頁的鏈接 同樣使用curl去獲取信息
要注意的就是正則表達(dá)式里面的html需要跟頁面的格式一樣, 你可以去原網(wǎng)站點(diǎn)右鍵查看源代碼,查看格式, 把要抓取的html復(fù)制下來 ,如果還是有不能抓取的內(nèi)容可能就是格式不正確 有可能有的地方是少空格或者多空格, 這個(gè)時(shí)候直接在標(biāo)簽之間(.*?)。也可以 一點(diǎn)一點(diǎn)的匹配 看具體是哪個(gè)部分沒有匹配到。
方維網(wǎng)絡(luò)為客戶提供網(wǎng)站開發(fā)定制服務(wù),網(wǎng)站制作居于LINUX+PHP+MYSQL框架,歡迎客戶咨詢我們建站熱線400-800-9385
如沒特殊注明,文章均為方維網(wǎng)絡(luò)原創(chuàng),轉(zhuǎn)載請注明來自http://m.oulysa.com/news/5604.html