在一次做網(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_RETURANSFER,1);//關(guān)閉直接輸出
$html_data=curl_exec($ch);
curl_close($ch);//關(guān)閉會(huì)話
這里要確認(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(.*?)pclass=page-content(.*?)pclass=text(.*?)/p#is';
preg_match_all($regular,$html_data,$connect);//進(jìn)行正規(guī)匹配取得自己要的內(nèi)容
//循環(huán)取出需要的內(nèi)容數(shù)組
foreach($connectas$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è)部分沒有匹配到。
中企動(dòng)力為客戶提供網(wǎng)站開發(fā)定務(wù),網(wǎng)站制作居于LINUX+PHP+MYSQL框架,歡迎客戶咨詢我們建站熱線400-660-8066