simple_html_dom抓取程序

来源:互联网 发布:cmm 软件开发过程 编辑:程序博客网 时间:2024/05/18 00:38
下载 simple_html_dom.php 文件
cj.class.php  扩展类,基于simple_html

<?php/*** 页面抓取方法、 基于simple_html功能实现 */class FetchHtml{    public $html = ''; #存放html页面内容    public $url = ''; #要抓取的页面的url        /**    * 构造函数 初始化 网址 和 获取网址内容    */    public function __construct($url = '')    {        $this->url = $url;         $this->html = $this->getHtml($url);    }        /**    * 获取整个页面内容    */    public function getHtml()     {        if($this->url) {            return file_get_html($this->url);        }    }        /**    * 获取网页部分的内容    * @param $paramArr 参数:如下参数详情    * array(    *   'node'=>array(    *       'element' => '', #节点元素名称 可以是id、class    *       'index' => '0', #节点索引位置 0第一个 1第二个...依次类推    *   )    * )    * @return html    */    public function getNodeHtml($paramArr)    {        $options = array(            'node' => array(                'element' => '', #节点元素名称 可以是id、class                'index' => '0', #节点索引位置 0第一个 1第二个...依次类推            )        );        if(is_array($paramArr)) {            $options = array_merge($options, $paramArr);        }        extract($options);        if($this->html == '') {$this->html = $this->getHtml($this -> url);if(!$this->html){return false;}        }        return $this->html->find($node['element'],$node['index']);    }            /**    * 获取指定区域的内容    * @param $paramArr 参数:如下参数详情    *   'node'=>array(    *       'element' => '', #节点元素名称 可以是id(如:div#nav) 、class(如:div.nav)    *       'index' => '0', #节点索引位置 0第一个 1第二个...依次类推    *   ),    *   'items'=>array(    *       #键名    *       'name'=>array(     *           'index' => 'all', #子节点索引位置 all表示匹配所有,也可以是数字 0第一个 1第二个...依次类推    *           'element' => 'li>a', #查找的节点元素 多个用> 目前就支持2级 支持元素class(如:div.nav)和元素id(如:div#nav)     *                                还可以连贯 div#nav>li    *           'attr' => 'href' #获取元素属性,留空或不设置将获取 element元素的内容    *       ),    *       //键名可以有多个    *       'linkurl'=>array(    *           'index' => '0',    *           'element' => 'ul#nav>li',    *           'attr' => 'href'    *       ),    *   )    * )    * @param $simple_html 针对区域内容再次进行抓取 默认为空    * @return html    */    public function getNodeAttribute($paramArr, $simple_html = '')    {        $options = array('items'=>array());        if(!isset($paramArr['items']) || empty($paramArr['items'])) {            return $this->getNodeHtml($this->$paramArr);        }        if(is_array($paramArr)) {            $options = array_merge($options, $paramArr);        }        if($simple_html) {            $html = $simple_html;        }         else {            $html = $this->getNodeHtml($options);if(!$html) return false;        }        $data = array();        foreach($paramArr['items'] as $k=>$item) {            $nodes = explode('>',$item['element']);            $len = count($nodes);            if($item['index']=='all') {                if($len == 1) {                    foreach($html->find($nodes[0]) as $element) {                        if(isset($item['attr']) && $item['attr']) {                             $data[$k][] = $element->$item['attr'];                        }                        else {                            $data[$k][] = $element->innertext;                        }                    }                }                elseif($len == 2) {                   foreach($html->find($nodes[0]) as $element) {                        if(isset($item['attr']) && $item['attr']) {                            $data[$k][] = $element->find($nodes[1],0)->$item['attr'];                        }                        else {                            $data[$k][] = $element->find($nodes[1],0)->innertext;                        }                    }                 }                }            else {                if($len == 1) {                    if(isset($item['attr']) && $item['attr']) {                        $data[$k] = $html->find($nodes[0],$item['index'])->$item['attr'];                    }                    else {                        $data[$k] = $html->find($nodes[0],$item['index'])->innertext;                    }                }                elseif($len == 2) {                    if(isset($item['attr']) && $item['attr']) {                        $data[$k] = $html->find($nodes[0],$item['index'])->find($nodes[1],0)->$item['attr'];                     }                    else {                            $data[$k] = $html->find($nodes[0],$item['index'])->find($nodes[1],0)->innertext;                       }                }            }        }        unset($html);        return $data;    }            /*析构函数*/    public function __destruct()     {        unset($this->html);    }}


baidu_sprider.php
<?phpheader("Content-type:text/html; charset=utf-8");set_time_limit(0);require 'simple_html_dom.php';require 'cj.class.php'; //引入采集扩展文件$showsize = 40; //百度每页显示多少条记录$pagesize = 0; //当前页条数$sql = "select product_name, from z_product_bijia";$result = '';$keyword = '安娜苏蝶之恋香水';$baidu_url = 'http://www.baidu.com/s?wd=site%3Aetao.com%20'.$keyword.'&pn='.$pagesize.'&rn='.$showsize.'&ie=utf-8';$baidu_params = array(        'node'=>array(            'element'=>'div#content_left',            'index' => '0',        ),        'items' => array(            'virtual_url' => array(                'index' => 'all',                'element' => 'div.f13>span',                //'attr' => 'src',            ),         'jump_url' => array(                'index' => 'all',                'element' => 'h3.t>a',                'attr' => 'href',            ),            )    );$baidu = new FetchHtml($baidu_url);//$html = $baidu->getNodeHtml($baidu_params);$attr = $baidu->getNodeAttribute($baidu_params);$temp_url = '';if(!empty($attr['virtual_url']) && !empty($attr['jump_url'])) {    foreach($attr['virtual_url'] as $k=>$url) {        if(preg_match('#s\.etao\.com\/item/#iu',$url)) {            $temp_url = $attr['jump_url'][$k];        }    }}}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 魅蓝手机屏幕碎了怎么办 手机钢化膜边缘有气泡怎么办 手机贴钢化膜边缘有气泡怎么办 苹果手机钢化膜边缘有气泡怎么办 手机膜里的水泡怎么办 膜贴好了有气泡怎么办 后档玻璃膜气泡怎么办 贴膜里面有灰尘怎么办 贴膜边缘不粘怎么办 贴膜时候的气泡怎么办 贴手机膜起泡了怎么办 手机膜起泡泡了怎么办 手机膜鼓起来了怎么办 贴膜中间有气泡怎么办 新车贴膜有气泡怎么办 贴手机膜进灰尘怎么办 贴手机膜有灰尘怎么办 华为mate10后机壳碎了怎么办 手机屏和壳分开了怎么办 oppoa33手机开不了机怎么办 7p背面刮花了怎么办 oppo手机左右两键失灵怎么办 苹果5s屏幕翘起怎么办 0pp0手机有点卡怎么办 手机用久有点卡怎么办 手机有点卡怎么办魅蓝 苹果6排线接反了怎么办 oppo手机解锁密码忘了怎么办 魅蓝5音量小怎么办 魅蓝5密码忘记了怎么办 魅蓝note3锁定了怎么办 魅族mx5系统铃声没有了怎么办 魅族主板坏了怎么办 魅族mx5螺丝滑丝怎么办 魅族魅蓝e手机被锁了怎么办 魅蓝e被锁机了怎么办 魅蓝3s卡顿怎么办 魅族note5玩王者荣耀卡怎么办 魅族手机内存不够怎么办 魅族手机音量小怎么办 魅族mx5指纹解锁失灵怎么办