2014-04-01 40 views
5

OK Mam proste zadanie, chcę tylko użyć wyszukiwarki Google, a dokładniej części autokorekty. Powiedzmy, że Google to: https://www.google.com/search?q=matew+mccaonaghey Jak widać, Google pokazał wyniki dla "matthew mcconaughey", tym samym autokorekty wprowadzono.Implementacja sugestii Google

Zrobiłem więc trochę badań i okazało się, że do takich danych można użyć zapytania http://suggestqueries.google.com. Chociaż działało OK przez większość czasu, najzabawniejsza rzecz: kiedy próbowałem uzyskać wynik dla "matew mccaonaghey", wróciłem pusty JSON. Jeśli zmieniłem ciąg wyszukiwania na "mathew mccoanaghey", wyniki są w porządku.

Czego mi brakuje? Czy suggestqueries.google.com nie działa tak samo jak www.google.com? Dlaczego otrzymuję pusty json w przypadku sugestii i rzeczywisty wynik podczas korzystania z google.com?

Dziękuję za odpowiedzi.

Kod jest w następujący sposób:

URL url = new URL("http://suggestqueries.google.com/complete/search?output=firefox&client=firefox&hl=en-US&q=matew+mccaonaghey"); 
URLConnection conn = (URLConnection) url.openConnection(); 
conn.setRequestProperty("User-Agent", 
    "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36"); 
conn.connect(); 
BufferedReader serverResponse = new BufferedReader(
    new InputStreamReader(conn.getInputStream())); 
System.out.println(serverResponse.readLine()); 
serverResponse.close(); 

Odpowiedz

0

Powód jest prosty :)
Google za pomocą różnych interfejsów API wewnętrznych. Sugerowany przez Firefoksa interfejs API jest przestarzały i rzeczywiście daje pustą odpowiedź na niektóre ciągi. Ale może również prowadzić do więcej lub innych wyników, powodem jest kod Google Googles.
Również nowy interfejs API może zwrócić dwukrotnie większą liczbę wyników w jednym zapytaniu.

Zapoznaj się z tym Google Suggest Scraper, to darmowy/open source projekt PHP, który może skrobać zarówno wewnętrzne API podpowiedzi/autouzupełniania, ten, którego użyłeś, i nowszy.

zacząłem go w obu trybach, aby upewnić się, że mam rację, oto wyniki:
tryb Firefox:

Google Suggest Spider results 
Recursion level 0 contains 0 keywords: 
| Keyword           | Suggests           | 
| -------------------------------------------------- | -------------------------------------------------- | 

Nowy tryb:

Recursion level 0 contains 20 keywords: 
| Keyword           | Suggests           | 
| -------------------------------------------------- | -------------------------------------------------- | 
| matew mccaonaghey         | matthew mcconaughey        | 
|             | matthew mcconaughey movies       | 
|             | matthew mcconaughey true detective     | 
|             | matthew mcconaughey alright alright alright  | 
|             | matthew mcconaughey oscar speech     | 
|             | matthew mcconaughey diet       | 
|             | matthew mcconaughey speech       | 
|             | matthew mcconaughey dallas buyers club    | 
|             | matthew mcconaughey hair       | 
|             | matthew mcconaughey dazed and confused    | 
|             | matthew mcconaughey woody harrelson    | 
|             | matthew mcconaughey oscar       | 
|             | matthew mcconaughey weight loss     | 
|             | matthew mcconaughey height       | 
|             | matthew mcconaughey workout      | 
|             | matthew mcconaughey hbo       | 
|             | matthew mcconaughey wolf of wall street   | 
|             | matthew mcconaughey golden globes     | 
|             | matthew mcconaughey net worth      | 
|             | matthew mcconaughey skinny       | 

nadzieję, że pomaga.

+0

Dziękuję za wyjaśnienie! Jednak wątpię, że Google pozwoliłoby na zeskrobanie ich danych, jak wydaje się to proponowany projekt PHP. Myślę, że gdyby było zbyt wiele próśb, jakiś captcha zostałby aktywowany po stronie Google. –

+1

Aby pokonać ograniczenia, projekt wykorzystuje wiele adresów IP pobranych od dostawcy IP i zarządza nimi w sposób, który zapobiega blokom długoterminowym. Użyłem go, aby uzyskać wiele tysięcy wyników bez żadnych problemów (do tej pory). I tak, jeśli po prostu zapytasz ich API ślepo, zostaniesz zablokowany. Ale nie przez captcha w tym przypadku, po prostu nie otrzymujesz już żadnych odpowiedzi. – John