我写了一个小的PHP脚本,用于使用curl抓取图像并在本地保存它们。 它从我的数据库读取图像的URL,抓取它并将文件保存到文件夹。 之前在其他几个网站上进行过测试和工作,失败的是我正在尝试使用的新网站。 我做了一些阅读,修改了脚本但仍然没有。
请建议注意什么。
$query_products = "SELECT * from product";
$products = mysql_query($query_products, $connection) or die(mysql_error());
$row_products = mysql_fetch_assoc($products);
$totalRows_products = mysql_num_rows($products);
do {
$ch = curl_init ($row_products['picture']);
$agent= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; rv:2.0) Gecko/20110319 Firefox/4.0');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
$rawdata = curl_exec ($ch);
$http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close ($ch);
if($http_status==200){
$fp = fopen("images/products/".$row_products['productcode'].".jpg", 'w');
fwrite($fp, $rawdata);
fclose($fp);
echo ' -- Downloaded <a href="'.$row_products['picture'].'" target="_blank">'.$newname.'</a> to local: <a href="images/products/'.$newname.'" target="_blank">'.$newname.'</a>';
} else {
echo ' -- Failed to download <a href="'.$row_products['picture'].'" target="_blank">'.$row_products['picture'].'</a>';
}
usleep(500);
} while ($row_products = mysql_fetch_assoc($products));
答案 0 :(得分:1)
您的目标网站可能需要/检查各种组合。按顺序:
执行此操作的唯一方法是嗅探正常请求的外观并模仿它。但是,您的MSIE
用户代理字符串看起来与真正的MSIE UA不同,如果我是您,我会考虑将其更改为真实副本。
你是否可以将curl输出到文件(使用输出流的setopt)并告诉我们你得到了什么错误代码,以及图像的URL?这将有助于我更精确。
此外,0并不成功 - 这是一次失败