2013-04-11 33 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