php爬取图片 爬取可以得到一个数组里如http://0512on.com/images/1.jpghttp://0512on.com/images/2.jpg但是我想把它下载在本地怎么弄。please. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 <?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; $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)); file_get_contentcURL等都可以实现 恩,楼上的都不错的,如果你还想对图片进行处理的话,可以看看php中image类的用法! saltprune的方案很好,但是有的网站打不开,failed to open stream:由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。是不是连接超时等原因,还是由于占用太多 貌似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); 用php把所有要抓取的图像链接生成出一个页面,然后拿迅雷批量下载。 一般是超时引起的,抓取国外网站,常出现这样的情况,可以试着重试$pageContent = file_get_contents($fullUrl); $i=0; while(!$pageContent) { if($i==3) //重试3次 { break; } $pageContent = file_get_contents($fullUrl); $i++; } lz研究一下curl请求,curl可以设置请求超时时间,而且如果有大量的抓图片的请求,curl也有相应的对于多个请求批量处理的函数,非常高效 curl好的,18个函数,去研究研究。其他的各位没什么好方法吗。Rex的方法我用过了,思路不错的。 你到底是想下载图片呢?还是做个自动的抓取程序啊?要是只是下载图片的话,可以将遍历的到的图片url打印出来,然后到迅雷里新建任务,把url都帖进去就行了!file_get_contents可以用来得到数据流curl不是很熟悉! 你已经取到了页面当中的图片了,可以参考我自己写的这篇文章,会对你有帮助,里面讲了把文件下载到本地的原理和实际代码:http://blog.csdn.net/ltx851201/article/details/6782042 恩..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;}至于取得网页中得图片地址,这个就是先拿到内容,后用正则匹配的事儿。 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 看看我用的adodb连接数据库添加数据怎么都提示错误呢? 关于joomla Spreadsheet_Excel_Writer(Pear)问题 寻找网站插件----------涂鸦板 关于自动换量网站开发的疑问 发送简历 谁有完整的PHP购物网站给一个? 有用open flash chart的朋友进来一下? onethink在chrome内核安装流程跳页面丢失session原因跟踪 谁能帮忙看看这个是用什么加密的,或者有什么方法可以解密。。谢谢大神们了······已经用Dezender解密,不行! PHP循环一个字符串的处理 想知道有没有人开发这样的joomla模板或组件?
$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;
$now = date('Ymd');
if(!is_dir($now))mkdir($now,0777);
file_put_contents($now.'/today'.basename($url), file_get_contents($url));
cURL
等都可以实现
是不是连接超时等原因,还是由于占用太多
$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);
一般是超时引起的,抓取国外网站,常出现这样的情况,可以试着重试
$pageContent = file_get_contents($fullUrl);
$i=0;
while(!$pageContent)
{
if($i==3) //重试3次
{
break;
}
$pageContent = file_get_contents($fullUrl);
$i++;
}
要是只是下载图片的话,可以将遍历的到的图片url打印出来,然后到迅雷里新建任务,把url都帖进去就行了!
file_get_contents可以用来得到数据流
curl不是很熟悉!
http://blog.csdn.net/ltx851201/article/details/6782042
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;
}至于取得网页中得图片地址,这个就是先拿到内容,后用正则匹配的事儿。
(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