谷歌图片搜索URL,无法抓取页面


Google image search by URL, unable to crawl the page

我试图通过url使用谷歌图像搜索用于研究目的。那是在我放弃按实际图像搜索之后,因为我不能真正让它工作。

使用PHP,我可以发出一个HTTP请求https://www.google.com/searchbyimage?image_url=https://www.google.com/images/nav_logo117.png

如果你把这个URL复制到你的浏览器中,你会看到结果(这里似乎发生了一些自动重定向)。

但是,如果您尝试手动请求URL,例如通过PHP或通过http://web-sniffer.net/?url=images.google.com/searchbyimage?image_url=https://www.google.com/images/nav_logo117.png,您会得到一个HTTP 302错误,表示页面已移动到其他URL。

我提取了那个URL,在浏览器上试了试,再次成功了。但是,如果你手动尝试这个URL,你会得到另一个HTTP 302错误,最终带你到谷歌的主页。

我见过这样的问题:脚本使用谷歌图像搜索与本地图像作为输入,似乎已经能够做到这一点,但提问者没有遇到同样的问题我做了

似乎Google正在执行基于您请求中的User-Agent的重定向。因此,如果您包含一个真正的User-Agent——从真实的web浏览器复制的东西——请求应该能正常工作。

这里是一些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;