Google-Suche in Java-Programm mit jsoup
Vor einiger Zeit suchte ich nach einer Möglichkeit, Google mithilfe eines Java-Programms zu durchsuchen. Ich war überrascht zu sehen, dass Google eine Web-Such-API hatte, diese jedoch längst eingestellt wurde und es jetzt keinen Standardweg mehr gibt, dies zu erreichen. Grundsätzlich ist eine Google-Suche eine HTTP-GET-Anfrage, bei der der Abfrageparameter Teil der URL ist. Zuvor haben wir gesehen, dass es verschiedene Optionen wie Java HttpUrlConnection oder Apache HttpClient gibt, um diese Suche durchzuführen. Das Problem liegt jedoch eher im Parsen der HTML-Antwort, um nützliche Informationen daraus zu extrahieren. Deshalb habe ich mich entschieden, jsoup zu verwenden – einen Open-Source-HTML-Parser, der in der Lage ist, HTML von einer gegebenen URL abzurufen. Unten finden Sie ein einfaches Programm, um Google-Suchergebnisse in einem Java-Programm abzurufen und zu parsen, um die Suchergebnisse zu extrahieren.
Java-Code für die Google-Suche
Unten sehen Sie das Java-Programm, um Google-Suchergebnisse mithilfe von jsoup abzurufen:
package com.journaldev.jsoup;
import java.io.IOException;
import java.util.Scanner;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class GoogleSearchJava {
public static final String GOOGLE_SEARCH_URL = "https://www.google.com/search";
public static void main(String[] args) throws IOException {
//Taking search term input from console
Scanner scanner = new Scanner(System.in);
System.out.println("Please enter the search term.");
String searchTerm = scanner.nextLine();
System.out.println("Please enter the number of results. Example: 5 10 20");
int num = scanner.nextInt();
scanner.close();
String searchURL = GOOGLE_SEARCH_URL + "?q="+searchTerm+"&num="+num;
//without proper User-Agent, we will get 403 error
Document doc = Jsoup.connect(searchURL).userAgent("Mozilla/5.0").get();
//below will print HTML data, save it to a file and open in browser to compare
//System.out.println(doc.html());
//If google search results HTML change the <h3 class="r" to <h3 class="r1"
//we need to change below accordingly
Elements results = doc.select("h3.r > a");
for (Element result : results) {
String linkHref = result.attr("href");
String linkText = result.text();
System.out.println("Text::" + linkText + ", URL::" + linkHref.substring(6, linkHref.indexOf("&")));
}
}
}
Beispielausgabe der Google-Suche
Unten sehen Sie eine Beispielausgabe für die Google-Suche in Java-Programm mit jsoup. Ich habe die HTML-Daten in einer Datei gespeichert und in einem Browser geöffnet, um die Ausgabe zu bestätigen:
Please enter the search term.
journaldev
Please enter the number of results. Example: 5 10 20
20
Text::JournalDev, URL::=https://www.journaldev.com/
Text::Java Interview Questions, URL::=https://www.journaldev.com/java-interview-questions
Text::Java design patterns, URL::=https://www.journaldev.com/tag/java-design-patterns
Text::Tutorials, URL::=https://www.journaldev.com/tutorials
Text::Java servlet, URL::=https://www.journaldev.com/tag/java-servlet
Text::Spring Framework Tutorial ..., URL::=https://www.journaldev.com/2888/spring-tutorial-spring-core-tutorial
Text::Java Design Patterns PDF ..., URL::=https://www.journaldev.com/6308/java-design-patterns-pdf-ebook-free-download-130-pages
Text::Pankaj Kumar (@JournalDev) | Twitter, URL::=https://twitter.com/journaldev
Text::JournalDev | Facebook, URL::=https://www.facebook.com/JournalDev
Text::JournalDev - Chrome Web Store - Google, URL::=https://chrome.google.com/webstore/detail/journaldev/ckdhakodkbphniaehlpackbmhbgfmekf
Text::Debian -- Details of package libsystemd-journal-dev in wheezy, URL::=https://packages.debian.org/wheezy/libsystemd-journal-dev
Text::Debian -- Details of package libsystemd-journal-dev in wheezy ..., URL::=https://packages.debian.org/wheezy-backports/libsystemd-journal-dev
Text::Debian -- Details of package libsystemd-journal-dev in sid, URL::=https://packages.debian.org/sid/libsystemd-journal-dev
Text::Debian -- Details of package libsystemd-journal-dev in jessie, URL::=https://packages.debian.org/jessie/libsystemd-journal-dev
Text::Ubuntu – Details of package libsystemd-journal-dev in trusty, URL::=https://packages.ubuntu.com/trusty/libsystemd-journal-dev
Text::libsystemd-journal-dev : Utopic (14.10) : Ubuntu - Launchpad, URL::=https://launchpad.net/ubuntu/utopic/%2Bpackage/libsystemd-journal-dev
Text::Debian -- Details of package libghc-libsystemd-journal-dev in jessie, URL::=https://packages.debian.org/jessie/libghc-libsystemd-journal-dev
Text::Advertise on JournalDev | BuySellAds, URL::=https://buysellads.com/buy/detail/231824
Text::JournalDev | LinkedIn, URL::=https://www.linkedin.com/groups/JournalDev-6748558
Text::How to install libsystemd-journal-dev package in Ubuntu Trusty, URL::=https://www.howtoinstall.co/en/ubuntu/trusty/main/libsystemd-journal-dev/
Text::[global] auth supported = cephx ms bind ipv6 = true [mon] mon data ..., URL::=https://zooi.widodh.nl/ceph/ceph.conf
Text::UbuntuUpdates - Package "libsystemd-journal-dev" (trusty 14.04), URL::=https://www.ubuntuupdates.org/libsystemd-journal-dev
Text::[Journal]Dev'err - Cursus Honorum - Enjin, URL::=https://cursushonorum.enjin.com/holonet/m/23958869/viewthread/13220130-journaldeverr/post/last
Fazit
Das war alles zur Google-Suche in einem Java-Programm. Verwenden Sie es vorsichtig, da ungewöhnlicher Datenverkehr von Ihrem Computer dazu führen könnte, dass Google Sie blockiert. Stellen Sie sicher, dass Sie die Richtlinien von Google einhalten, und seien Sie sich bewusst, dass das Parsen von HTML instabil sein kann, wenn sich die Seitenstruktur ändert. Bibliotheken wie jsoup bieten eine effiziente Möglichkeit, Daten abzurufen und zu parsen, aber verwenden Sie solche Tools immer verantwortungsvoll und ethisch. Es ist auch wichtig, den generierten Code regelmäßig zu überprüfen und zu aktualisieren, um sicherzustellen, dass er mit den neuesten Änderungen der Google-Suchergebnisseite kompatibel bleibt. Zudem sollte bei der Nutzung von Tools wie jsoup stets ein respektvoller Umgang mit den Daten und ein verantwortungsvolles Handeln gewährleistet sein, um mögliche rechtliche oder technische Probleme zu vermeiden. Viel Erfolg bei der Umsetzung!