2013-04-11 55 views
1

我正在尝试使用谷歌图片搜索url用于研究目的。那是因为我放弃了对实际图像的搜索,因为我无法真正实现它。Google图片按URL搜索,无法抓取页面

什么做是迄今为止

使用PHP,我可以如果您将该网址复制到浏览器中,你看到的结果(似乎有些自动重定向发生一个HTTP请求https://www.google.com/searchbyimage?image_url=https://www.google.com/images/nav_logo117.png

这里)。

但是,如果您尝试通过PHP手动请求URL,或者通过http://web-sniffer.net/?url=images.google.com/searchbyimage?image_url=https://www.google.com/images/nav_logo117.png获得HTTP 302错误,说明该页面已被移至其他某个URL。

我提取了该URL,在浏览器上试用了它,并再次运行。但是,如果您手动尝试此网址,则会再次发生HTTP 302错误,最终将您带到Google的首页。

我已经看到了这样的问题:Script to use Google Image Search with local image as input这似乎已经能够做到这一点,但提问者没有碰到我做

+1

您可能会发现[本博客文章(http://skyzerblogger.blogspot.be/2013/01/google-reverse-image- search-scraping.html)很有用。但事实是,没有官方的反向图像搜索API,这是故意的。 – Cairnarvon 2013-05-10 04:43:44

回答

2

同样的问题,似乎谷歌是基于执行重定向用户代理在您的请求。所以如果你包含一个真正的用户代理 - 从真实的网络浏览器复制的东西 - 请求应该正常工作。

下面是一些例子PHP代码为我的作品:

$location = 'http://www.google.com/searchbyimage?image_url=https://www.google.com/images/nav_logo117.png'; 

do { 
    $ch = curl_init($location); 

    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.0; rv:20.0) Gecko/20100101 Firefox/20.0'); 
    curl_setopt($ch, CURLOPT_HEADER, true); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

    $data = curl_exec($ch); 
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
    curl_close($ch); 

    $data = str_replace("\r\n","\n",$data); 
    list($headers, $data) = explode("\n\n", $data, 2); 
    $headers = explode("\n",$headers); 

    $location = null; 
    foreach ($headers as $header) 
    if (stripos($header, 'Location:', 0) === 0) 
     $location = trim(substr($header,9)); 

} while ($http_code == 302 && $location != null); 

echo $data; 
+0

这不仅仅是用户代理,而是只要有302错误就继续请求的循环。以及'curl_setopt($ ch,CURLOPT_RETURNTRANSFER,true);',这对我的在线服务器起作用。另一个命令'curl_setopt($ ch,CURLOPT_FOLLOWLOCATION,1);'可以让它在我的本地主机上工作,但由于某种原因,与您的命令不同,此命令在我的服务器上不起作用。谢谢! – 2013-05-10 21:08:55

+0

对不起,我以为你有302的部分在控制之下,这就是为什么我没有提到它。据我所知,FOLLOWLOCATION选项在安全模式下被禁用。这可能就是为什么你不能在你的服务器上使用它。 – 2013-05-10 21:14:30