php匹配指定標(biāo)簽的內(nèi)容

php匹配指定div內(nèi)容,在用php編寫(xiě)采集程序的時(shí)候,抓取到的網(wǎng)頁(yè)數(shù)據(jù)有時(shí)候我們只需要一小段標(biāo)簽內(nèi)容,怎么才能沖html代碼中提取出來(lái)呢,這里提供一個(gè)函數(shù)示例,實(shí)現(xiàn)php匹配任意html標(biāo)簽內(nèi)的所有內(nèi)容:

站在用戶(hù)的角度思考問(wèn)題,與客戶(hù)深入溝通,找到桂東網(wǎng)站設(shè)計(jì)與桂東網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶(hù)體驗(yàn)好的作品,建站類(lèi)型包括:網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊(cè)、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋桂東地區(qū)。

/**
* 匹配任意id的html標(biāo)簽內(nèi)容
* 
*/
function getWebTag($tag_id,$tag='div',$data=false){     
        $charset_pos = stripos($data,'charset');
        if($charset_pos) {
            if(stripos($data,'utf-8',$charset_pos)) {
                $data = iconv('utf-8','utf-8',$data);
            }else if(stripos($data,'gb2312',$charset_pos)) {
                $data = iconv('gb2312','utf-8',$data);
            }else if(stripos($data,'gbk',$charset_pos)) {
                $data = iconv('gbk','utf-8',$data);
            }
        }
       
        preg_match_all('/<'.$tag.'/i',$data,$pre_matches,PREG_OFFSET_CAPTURE);    //獲取所有div前綴
        preg_match_all('/<\/'.$tag.'/i',$data,$suf_matches,PREG_OFFSET_CAPTURE); //獲取所有div后綴
        $hit = strpos($data,$tag_id);
        if($hit == -1) return false;    //未命中
        $divs = array();    //合并所有div
        foreach($pre_matches[0] as $index=>$pre_div){
            $divs[(int)$pre_div[1]] = 'p';
            $divs[(int)$suf_matches[0][$index][1]] = 's';   
        }
       
        //對(duì)div進(jìn)行排序
        $sort = array_keys($divs);
        asort($sort);
       
        $count = count($pre_matches[0]);
        foreach($pre_matches[0] as $index=>$pre_div){
            //<div $hit <div+1    時(shí)div被命中
            if(($pre_matches[0][$index][1] < $hit) && ($hit < $pre_matches[0][$index+1][1])){
                $deeper = 0;
                //彈出被命中div前的div
                while(array_shift($sort) != $pre_matches[0][$index][1] && ($count--)) continue;
                //對(duì)剩余div進(jìn)行匹配,若下一個(gè)為前綴,則向下一層,$deeper加1,
                //否則后退一層,$deeper減1,$deeper為0則命中匹配,計(jì)算div長(zhǎng)度
                foreach($sort as $key){
                    if($divs[$key] == 'p') $deeper++;
                    else if($deeper == 0) {
                        $length = $key-$pre_matches[0][$index][1];
                        break;
                    }else {
                        $deeper--;
                    }
                }
                $hitDivString = substr($data,$pre_matches[0][$index][1],$length).'</'.$tag.'>';
                break;
            }
        }
        return $hitDivString;
}

調(diào)用示例

$html=file_get_contents('http://www.baidu.com');

$divContent=getWebTag('id="content"','div',$html);

網(wǎng)頁(yè)題目:php匹配指定標(biāo)簽的內(nèi)容
當(dāng)前路徑:http://muchs.cn/article24/ijdpje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、小程序開(kāi)發(fā)外貿(mào)建站、App設(shè)計(jì)微信小程序、全網(wǎng)營(yíng)銷(xiāo)推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

小程序開(kāi)發(fā)