curl采集循环数据

<?php 
header("content-type:text/html;charset=utf-8");
/**
 * @author   Cpath
 * @time     2016/5/8
 * curl采集获取10页图片数据
 */

if (!is_file('./photo')) {
        mkdir('./photo');
    }
//$dns="mysql:host=127.0.0.1;dbname=article";
//$p=new PDO($dns,"root","root");
//$p->query("set names utf8");
$preg='#<tr>[\r\t\s\n]+<td class=".*" valign=".*">[\r\t\s\n]+<ul id=".*"  class=".*">[\r\t\s\n]+<li class=".*">[\r\t\s\n]+<span class=".*">[\r\t\s\n]+<center>[\r\t\s\n]+<a href=".*" target=".*" onclick=".*">[\r\t\s\n]+<img border="\d+" id=".*" src="(.*)" width="\d+" height="\d+" sizew="\d+" sizeh="\d+" class=".*"/>[\r\t\s\n]+</a>[\r\t\s\n]+</center>[\r\t\s\n]+</span>[\r\t\s\n]+</li>[\r\t\s\n]+</ul>[\r\t\s\n]+</td>[\r\t\s\n]+</tr>#isU';


for ($i=0; $i <=240; $i++) { 
    $url="http://image.yodao.com/search?q=%E5%A4%A9%E8%8A%B1%E6%9D%BF%E5%9B%BE%E7%89%87&keyfrom=image.nextPage&start=".$i+=24;

    $ch=curl_init();
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    $con=curl_exec($ch);



preg_match_all($preg,$con,$res);
$images = $res[1];
    foreach ($images as $key => $value) {
        set_time_limit(0);
        $file=file_get_contents($images[$key]);
        //获取图片扩展名
        $pathex=pathinfo($images[$key]);
        $img=str_replace('0.','',str_replace(' ','',microtime())).'.'.$pathex['extension'];
        $success=file_put_contents("./photo/".$img,$file);
        //入库
        //$sql="insert into goods(img) value('".$img."')";    
        //$pre=$p->prepare($sql);
        //$success=$pre->execute();

        if($success){
            if ($i%24==0) {
                echo "目前采集了".$i."张图片<br/>";
            }
        }else{
            echo "采集失败";
        }
    }

    curl_close($ch);

}
include 'db.php';

#采集数据添加入库
#前台列表以news_1.html 的伪静态形式展示
#增加搜索,列表,缓存(redis)
#批量生成html
function curl($url){
    $ch =  curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_HEADER, 0);//设置为0、1控制是否返回请求头信息
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $output=curl_exec($ch);
    curl_close($ch);
    return $output;
}
$start=isset($_POST['start'])?isset($_POST['start']):'';
$file1=isset($_POST['file1'])?isset($_POST['file1']):'';
if($start=='start'){
    $url="http://auto.ifeng.com";
    $output=curl($url);
    $preg = '#<div class="artb artb1" >[\r\n\t\s]+<a href="(.*)" .*><img ifengsrc="(.*)" src=".*" alt=".*"></a>.*<a .*>(.*)</a>.*<span class="t1">(.*) &nbsp;.* (\d{4}[-]{1}\d{2}[-]{1}\d{2} \d{2}[:]\d{2})</span>.*<div class="imgt_con">(.*)</div>.*</div>#isU';#凤凰汽车 &nbsp; [谍照] &nbsp; KKND &nbsp; 2017-02-04 08:21
    preg_match_all($preg,$output,$res);
//print_r($res);
# 数据入库

    for($i=0;$i<count($res[1]);$i++){
        $sql = 'insert into news_cache (dsurl,img,title,brand,`time`,content) values ("'.$res[1][$i].'","'.$res[2][$i].'","'.$res[3][$i].'","'.$res[4][$i].'","'.$res[5][$i].'","'.$res[6][$i].'")';
        $dbh=db();
        $su=$dbh->exec($sql);
        if($su){
            header("Location:news_list.php");
        }else{
            echo "采集失败----";

        }

    }
}elseif($file1=='file1'){

    $dbh=db();
    $sth = $dbh->prepare("select id,dsurl from news_cache");
    $sth ->execute();
    $result = $sth->fetchAll(PDO::FETCH_ASSOC);

   for($i=0;$i<count($result);$i++){
       ob_start(); //打开输出缓冲区
       $cacheTime = 864000; //设置缓存页面过期时间
       $cacheDir = 'cacheDir'; //设置缓存页面文件目录
       if (!is_dir($cacheDir)) mkdir($cacheDir); //判断目录是否存在,否则创建目录
       $cacheFile = $cacheDir.'/'.'news-car-'.$result[$i]['id'].'.html'; //缓存文件路径,文件以日期命名
       #redis 缓存文件 id
       $redis = new redis();
       $redis->connect('127.0.0.1','6379');
       $redis->auth('root');

       //设置带有效期的字符串(String)
      // $redis->delete("car-".$result[$i]['id']);
       $redis->setex("car-".$result[$i]['id'],1000*10,$result[$i]['id']);
     //  echo $redis->get('car-5');
     // die;
       if (!is_file($cacheFile) || time() - filemtime($cacheFile) > $cacheTime) {
            $output=curl($result[$i]['dsurl']);
            $preg='#<div class="arl-c-txt">(.*)</div>#isU';
            preg_match_all($preg,$output,$ress);
             print_r('<meta charset="UTF-8">'.$ress[0][0].$ress[1][0]);
            $content = ob_get_contents(); //取得php页面输出的全部内容
            $fp = fopen($cacheFile, "w"); //输出内容写入文件
            fwrite($fp, $content);
            fclose($fp);
        } else {
           echo $content = file_get_contents($cacheFile); //如果缓存文件已经存在,且未过期则读取
       }

   }


}

?>

<button onclick="start()">开始采集</button>
<button onclick="file1()">批量生成html文件</button>
<button onclick="list()">新闻列表</button>
<script src="jquery-1.9.1.min.js"></script>
<script>

function start(){
    $.post('news_caiji.php',{start:'start'});
}
function  file1(){
    $.post('news_caiji.php',{file1:'file1'});

}
function list(){
    location.href="http://www.php1.com/Freshman/news_cache/news_list.html";
}

</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值