Home  >  Article  >  Backend Development  >  php匹配指定标签的内容

php匹配指定标签的内容

WBOY
WBOYOriginal
2016-06-23 13:32:411627browse

php匹配指定div内容,在用php编写采集程序的时候,抓取到的网页数据有时候我们只需要一小段标签内容,怎么才能冲html代码中提取出来呢,这里提供一个函数示例,实现php匹配任意html标签内的所有内容:

/*** 匹配任意id的html标签内容* */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';           }               //对div进行排序        $sort = array_keys($divs);        asort($sort);               $count = count($pre_matches[0]);        foreach($pre_matches[0] as $index=>$pre_div){            //<div $hit <div+1    时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;                //对剩余div进行匹配,若下一个为前缀,则向下一层,$deeper加1,                //否则后退一层,$deeper减1,$deeper为0则命中匹配,计算div长度                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;}

调用示例

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

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


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn