您的位置:首页 > 编程语言 > PHP开发

php实现采集电影数据

2014-11-07 23:51 411 查看
<?php

header("content-type:text/html;charset=utf-8");

//初始化curl

$curl = curl_init();

//突破防盗链

curl_setopt($curl, CURLOPT_REFERER, "www.7060.com");

//设置curl的url

curl_setopt($curl, CURLOPT_URL, "http://www.7060.mobi/list/1_0_8_0_0_0_new.html");

//设置不限制时间

set_time_limit(0);

//设置将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

$str= curl_exec($curl);

//定义下载图片的路径

if(!is_dir("./caiji")){

    mkdir("./caiji");

}else{

    $dir="./caiji";

}

//截取后的内容

$content =cut_str('<div id="haibaoBox">','<div class="pager">', $str);

//<a></a>的正则

  $preg ='/<a\s*href=(\"|\')*(.*)\1[^>]*>(.*)<\/a>/U';

//$patt ='/<a\s*href=("|\')(.*)\1[^>]*>(.*)<\/a>/U';

//匹配结果放入数组$a中

preg_match_all($preg, $content,$a);

echo "<pre>";

//遍历$a,

foreach ($a[0] as $k =>$v){

    $data["www.7060.mobi".$a[2][$k]] =array(

            "title"=>strip_tags($a[3][$k]),

            "litpic"=>cut_str('data-original="','" src="', $a[3][$k])

    );

    

//结果如下

// [www.7060.mobi/movie/21471.html] => Array

// (

//         [title] => 科洛弗档案

//         [litpic] => http://7060.2bao.cc/upload/s/2013-12/545c25ade77bf.jpg
// )

}

//var_dump($data);

//声明一个数组保存收集的电影数据

$list =array();

foreach ($data as $k=>$v){

    $row['title']=$v['title'];

    $row['daoyan']=downdaoyan($curl,$k);

    $row['zhuyan']=downzhuyan($curl,$k);

    $row['litpic']=downpicture($curl, $v['litpic'],$dir);

    //$row['litpic']=$v['litpic'];

    $list[]=$row;

}

var_dump($list);

/*得到详细页面导演

 * $url,详细页面地址

 * $curl,curl初始化资源

 * $dir 图片保存路径

 * */

function downdaoyan($curl,$url){

    //获得详细页面内容

    curl_setopt($curl, CURLOPT_URL, $url);

    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

    $xiangxi =curl_exec($curl);

    //<li><span>导演:</span><a target="_blank" href="/vod-%E9%A9%AC%E7%89%B9%C2%B7%E9%87%8C%E5%A4%AB%E6%96%AF.html">马特·里夫斯</a></li>

    $dypreg ='/<li><span>导演:<\/span>(.*)<\/li>/';

    preg_match($dypreg, $xiangxi,$a);

    $daoyan =preg_replace(array('/<a[^>]*>/','/<\/a>/'), array("",","), $a[1]);

    return trim($daoyan,",");

    

}

/*得到详细页面主演

 * $url,详细页面地址

 * $curl,curl初始化资源

 * */

function downzhuyan($curl,$url){

    //获得详细页面内容

    curl_setopt($curl, CURLOPT_URL, $url);

    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

    $xiangxi =curl_exec($curl);

    //<li><span>主演:</span><a target="_blank" href="/vod-%E6%9D%8E%E7%81%BF%E7%87%90.html">李灿燐</a><a target="_blank" href="/vod-%E6%A2%81%E5%98%89%E7%90%AA.html">梁嘉琪</a><a target="_blank" href="/vod-%E7%BD%97%E6%A0%91%E7%85%8C.html">罗树煌</a><a target="_blank"
href="/vod-%E9%BB%84%E7%88%B5%E6%99%93.html">黄爵晓</a></li>

    $zypreg ='/<li><span>主演:<\/span>(.*)<\/li>/';

    preg_match($zypreg, $xiangxi,$a);

    $daoyan =preg_replace(array('/<a[^>]*>/','/<\/a>/'), array("",","), $a[1]);

    return trim($daoyan,",");

    

}

/*得到详细页面图片

 * $url,详细页面图片地址

 * $curl,curl初始化资源

 * $dir,图片路径

 * */

function downpicture($curl,$url,$dir){

    

    //获得详细页面内容

    curl_setopt($curl, CURLOPT_URL, $url);

    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

    $xiangxi =curl_exec($curl);

//     //<span class="down_neirLeft_Pic"><img src="http://7060.2bao.cc/upload/b/2014-11/5459a8d001146.jpg" alt="最后的学生时代下载" width="185" height="245" /></span>

//     $tppreg ='/<span\s*class="down_neirLeft_Pic"><img src="(.*)"\s*alt="/';

//     preg_match($dypreg, $xiangxi,$a);

//     $daoyan =preg_replace(array('/<a[^>]*>/','/<\/a>/'), array("",","), $a[1]);

//     return trim($daoyan,",");

    //http://7060.2bao.cc/upload/s/2013-12/545c25ade77bf.jpg

    //得到文件名

    $filename = substr(strrchr($url,"/"),1);

    //保存图片

    file_put_contents($dir."/".$filename, $xiangxi);

    return $dir."/".$filename;

    

    

}

/*

 * 截取字符串的函数

 * $start 开始的字符

 * $end  结束的字符

 * $str 截取源

 * */

function cut_str($start,$end,$str){

    //通过开始位置和结束位置求出长度用substr获取字符串

    $s = strpos($str, $start)+strlen($start);

    $e = strpos($str, $end);

    $offset = $e-$s;

    return substr($str, $s,$offset);

    //echo $e;

    

    

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: