Zapytanie do przeglądarki google - ilość wyszukanych wyników

Odpowiedz Nowy wątek
2011-09-02 18:21
Marek
0

Cześć wszystkim :)

Chciałbym z poziomu aplikacji Java wysłać zapytanie do Google i otrzymać ilość wyszukanych stron. Szukałem odpowiedniego API, ale niestety nic konkretnego nie znalazłem (a przynajmniej żadne z nazw wszystkich API od Google nie wskazuje na wysłanie zapytania do wyszukiwarki). Prośba o wskazówki :)

Pozostało 580 znaków

2011-09-02 18:36
0

Można to zrobić tak:
Pobierasz stronę (np.:http://www.google.pl/search?q=hello+world) i wyrażeniami regularnymi wybierasz tekst od <div id="resultStats"> do <nobr>
ZTCW, w Javie stronę można pobrać bez większego wysiłku, a z wyrażeniami regularnymi nie powinno być większego problemu.


Pozostało 580 znaków

2011-09-02 23:16
Marek
0

Bardzo oryginalne rozwiązanie! :) Dzięki :)

Pozostało 580 znaków

2011-09-02 23:48
Marek
0

Napisałem kawałem kodu, jednak nie mogę dobić do Google'a bo zwraca mi błąd 403. Ktoś orientuje się dlaczego?

import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;

public class Main {

    public static void main(String[] args) {

        URL url;
        InputStream is = null;
        DataInputStream dis;
        String line;

        try {
            url = new URL("http://www.google.com/search?q=hello+world");
            is = url.openStream();  // throws an IOException
            dis = new DataInputStream(new BufferedInputStream(is));

            while ((line = dis.readLine()) != null) {
                if (line.contains("<div id=\\\"resultStats\\\">"))
                    System.out.println(line);
                break;
            }
            System.out.println("xx");
        } catch (MalformedURLException mue) {
             mue.printStackTrace();
        } catch (IOException ioe) {
             ioe.printStackTrace();
        } finally {
            try {
                is.close();
            } catch (IOException ioe) {
                // nothing to see here
            }
        }

    }
}

Pozostało 580 znaków

2011-09-03 11:15
VGT
0

Google jest akurat bardzo wrażliwy na wszelkie zautomatyzowane zapytania. Sporo tego do niego leci, więc stara się wycinać, co tylko może.

W związku z tym musisz się chociaż trochę upodobnić do przeglądarki, aby zaczęło działać. Na start - dodaj "User agent":

url = new URL("http://www.google.com/search?q=hello+world");
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setRequestProperty("User-agent", "Opera/9.80 (Windows NT 6.1; U; es-ES) Presto/2.9.181 Version/12.00");
is = connection.getInputStream();
dis = new DataInputStream(new BufferedInputStream(is));
while ((line = dis.readLine()) != null)
    {
    System.out.println(line);
    }
System.out.println("xx");

Dalej możesz natknąć się na inne problemy. Choćby zbyt szybkie/częste odpytywanie także Ciebie zablokuje.

PS. readLine() z DataInputStream jest już oznaczone, jako deprecated. Porządniej będzie chyba skorzystać z BufferedReader.


edytowany 2x, ostatnio: VGT, 2011-09-03 11:17

Pozostało 580 znaków

2011-09-03 12:37
0

jezu chryste. nie mozecie tego zrobic JAK LUDZIE i skorzystac z API? http://ajax.googleapis.com/ajax/services/search/web?q=google+api+json&v=1.0

"estimatedResultCount":"674000"

chyba to cie interesuje, hm?

edytowany 1x, ostatnio: Kwpolska, 2011-09-03 12:45

Pozostało 580 znaków

2011-09-03 19:43
Marek
0

Dzięki za wskazówki, przetestuję :)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0