爬取可以得到一个数组里如
http://0512on.com/images/1.jpg
http://0512on.com/images/2.jpg
但是我想把它下载在本地怎么弄。please.

解决方案 »

  1.   

    <?php
    $url = 'http://img.baidu.com/img/logo-zhidao.gif';$matches = parse_url($url);
    $host = $matches['host'];
    $path = $matches['path'] ? $matches['path'].(isset($matches['query']) ? '?'.$matches['query'] : '') : '/';
    $port = !empty($matches['port']) ? $matches['port'] : 80;$out = "GET $path HTTP/1.0\r\n";
    $out .= "Host: $host\r\n";
    $out .= "\r\n\r\n";$fp = @fsockopen($host, $port, $errno, $errstr, 10);
    stream_set_blocking($fp, TRUE);
    stream_set_timeout($fp, $timeout);
    @fwrite($fp, $out);
    $status = stream_get_meta_data($fp);
    while (!feof($fp)) {
     if(($header = @fgets($fp)) && ($header == "\r\n" ||  $header == "\n")) {
      break;
     }
    }
    $return = '';
    while(!feof($fp)) {
     $data = fread($fp, 8192);
     $return .= $data;
    }
    @fclose($fp);
    echo $return;
      

  2.   

    $url = 'http://www.1238pro.com/tuan/images/20110227/1114d65f645ae042.jpg';
    $now = date('Ymd');
    if(!is_dir($now))mkdir($now,0777);
    file_put_contents($now.'/today'.basename($url), file_get_contents($url));
      

  3.   

    file_get_content
    cURL
    等都可以实现
      

  4.   

    恩,楼上的都不错的,如果你还想对图片进行处理的话,可以看看php中image类的用法!
      

  5.   

    saltprune的方案很好,但是有的网站打不开,failed to open stream:由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。
    是不是连接超时等原因,还是由于占用太多
      

  6.   

    貌似file_get_contents获取远程文件很耗cpu,如果直接curl是不是会好点,供参考:$url = 'http://img.baidu.com/img/logo-zhidao.gif';
    $curl = curl_init();
    curl_setopt($curl,CURLOPT_URL, $url);
    curl_setopt ($curl, CURLOPT_HEADER, false);
    curl_setopt ($curl, CURLOPT_RETURNTRANSFER, true);
    $result = curl_exec($curl);
    curl_close($curl);
    file_put_contents(basename($url),$result);
      

  7.   

    用php把所有要抓取的图像链接生成出一个页面,然后拿迅雷批量下载。
      

  8.   


    一般是超时引起的,抓取国外网站,常出现这样的情况,可以试着重试
    $pageContent = file_get_contents($fullUrl);
        $i=0;
        while(!$pageContent)
        {
           if($i==3)  //重试3次
           {
               break;
           }
           $pageContent = file_get_contents($fullUrl);
           $i++;
        }
      

  9.   

    lz研究一下curl请求,curl可以设置请求超时时间,而且如果有大量的抓图片的请求,curl也有相应的对于多个请求批量处理的函数,非常高效
      

  10.   

    curl好的,18个函数,去研究研究。其他的各位没什么好方法吗。Rex的方法我用过了,思路不错的。
      

  11.   

    你到底是想下载图片呢?还是做个自动的抓取程序啊?
    要是只是下载图片的话,可以将遍历的到的图片url打印出来,然后到迅雷里新建任务,把url都帖进去就行了!
    file_get_contents可以用来得到数据流
    curl不是很熟悉!
      

  12.   

    你已经取到了页面当中的图片了,可以参考我自己写的这篇文章,会对你有帮助,里面讲了把文件下载到本地的原理和实际代码:
    http://blog.csdn.net/ltx851201/article/details/6782042
      

  13.   

    恩..
    lz意思是先抓取页面图片地址,之后根据图片地址把相应图片下载到本地对吧
    一般来说可以采集搜索引擎中得图片搜索结果,或者购物网站的产品图片
    思路如下
    首先用curl或file_get_content得到网页内容。
    用正则表达式截取部分需要的内容(该段内容中得图片要,其他部分的图片不要)
    用正则表达式匹配出需要的图片地址,如果是相对地址则修改成绝对地址。之后用文件下载(好像用file_get_content,curl搞不定,反正我试过不行)。其实http://blog.csdn.net/ltx851201/article/details/6782042这里面已经有了相应的原理了。如果lz还不明白,我就给你个函数。你试试看function getimg($url,$filename="") {//$url是需要下载的图片地址,$filename是保存到本地的文件名,注意如果在子文件夹或上层文件夹需要给绝对或相对路径。如果为空则以目前时间为文件名。保存在与该文件相同的文件目录下。楼主可以随便找个网址图片测试下这个函数。
       if($url==""):return false;endif;   if($filename=="") {
         $ext=strrchr($url,".");
         if($ext!=".gif" && $ext!=".jpg"):return false;endif;
         $filename=date("dMYHis").$ext;
       }   ob_start();
       readfile($url);
       $img = ob_get_contents();
       ob_end_clean();
       $size = strlen($img);   $fp2=@fopen($filename, "a");
       fwrite($fp2,$img);
       fclose($fp2);   return $filename;
    }至于取得网页中得图片地址,这个就是先拿到内容,后用正则匹配的事儿。
      

  14.   

    1. file_get_contents
    (PHP 4 >= 4.3.0, PHP 5)file_get_contents — 将整个文件读入一个字符串说明
    string file_get_contents ( string $filename [, bool $use_include_path [, resource $context [, int $offset [, int $maxlen ]]]] )
    和 file() 一样,只除了 file_get_contents() 把文件读入一个字符串。将在参数 offset 所指定的位置开始读取长度为 maxlen 的内容。如果失败,file_get_contents() 将返回 FALSE。 file_get_contents() 函数是用来将文件的内容读入到一个字符串中的首选方法。如果操作系统支持还会使用内存映射技术来增强性能。 Note: 如果要打开有特殊字符的 URL (比如说有空格),就需要使用 urlencode() 进行 URL 编码。 Note: context 参数可以用 NULL 来忽略。 2. CURL