爬取可以得到一个数组里如
http://0512on.com/images/1.jpg
http://0512on.com/images/2.jpg
但是我想把它下载在本地怎么弄。please.
http://0512on.com/images/1.jpg
http://0512on.com/images/2.jpg
但是我想把它下载在本地怎么弄。please.
调试欢乐多
$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