通过 URL 搜索 Google 图片,无法抓取页面
Posted
技术标签:
【中文标题】通过 URL 搜索 Google 图片,无法抓取页面【英文标题】:Google image search by URL, unable to crawl the page 【发布时间】:2013-04-11 20:12:54 【问题描述】:我正在尝试通过 url 使用 Google 图片搜索来进行研究。那是在我放弃通过实际图像进行搜索之后,因为我无法真正让它工作。
到目前为止做了什么
使用 php,我可以向https://www.google.com/searchbyimage?image_url=https://www.google.com/images/nav_logo117.png 发出 HTTP 请求
如果您将该 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 的主页。
我见过类似的问题:Script to use Google Image Search with local image as input 似乎可以做到,但提问者并没有遇到与我相同的问题
【问题讨论】:
您可能会发现this blog post 很有用。但问题是,没有官方的反向图像搜索 API,这是故意的。 【参考方案1】:Google 似乎正在根据您请求中的 User-Agent 执行重定向。所以如果你包含一个真正的用户代理——从一个真正的网络浏览器复制的东西——请求应该可以正常工作。
以下是一些适用于我的示例 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;
【讨论】:
这不仅仅是用户代理,而是只要有 302 错误,就会继续请求的循环。以及在我的在线服务器上工作的curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
。另一个命令curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
可以让它在我的本地主机上工作,但由于某种原因,这个命令与你的不同,在我的服务器上不起作用。谢谢!
对不起,我以为你控制了 302 部分,所以我没有提到它。据我了解,在安全模式下,FOLLOWLOCATION 选项被禁用。这可能就是您无法在实时服务器上使用它的原因。以上是关于通过 URL 搜索 Google 图片,无法抓取页面的主要内容,如果未能解决你的问题,请参考以下文章