JavaプログラムからのGoogle検索の例
以前、Javaプログラムを使用してGoogleを検索する方法を探していました。Googleにはウェブ検索APIがあることに驚きましたが、それは以前廃止され、現在は標準的な方法がありません。基本的に、Google検索はHTTP GETリクエストですが、クエリパラメータはURLの一部です。以前、JavaのHttpURLConnectionやApache HttpClientなどのさまざまなオプションを使ったことがありますが、HTMLのレスポンスを解析して有用な情報を抽出する問題があります。そこで、URLからHTMLを取得することができるオープンソースのHTMLパーサーであるjsoupを使用することにしました。以下に、JavaプログラムでGoogleの検索結果を取得し、解析して検索結果を見つけるための簡単なプログラムを示します。
package com.scdev.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("&")));
}
}
}
以下は、上記プログラムからのサンプル出力です。私はHTMLデータをファイルに保存し、ブラウザで開いて出力を確認しました。これは私たちが望んだものです。出力を以下の画像と比較してください。
Please enter the search term.
scdev
Please enter the number of results. Example: 5 10 20
20
Text::JournalDev, URL::=https://www.scdev.com/
Text::Java Interview Questions, URL::=https://www.scdev.com/java-interview-questions
Text::Java design patterns, URL::=https://www.scdev.com/tag/java-design-patterns
Text::Tutorials, URL::=https://www.scdev.com/tutorials
Text::Java servlet, URL::=https://www.scdev.com/tag/java-servlet
Text::Spring Framework Tutorial ..., URL::=https://www.scdev.com/2888/spring-tutorial-spring-core-tutorial
Text::Java Design Patterns PDF ..., URL::=https://www.scdev.com/6308/java-design-patterns-pdf-ebook-free-download-130-pages
Text::Pankaj Kumar (@JournalDev) | Twitter, URL::=https://twitter.com/scdev
Text::JournalDev | Facebook, URL::=https://www.facebook.com/JournalDev
Text::JournalDev - Chrome Web Store - Google, URL::=https://chrome.google.com/webstore/detail/scdev/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-scdeverr/post/last
JavaプログラムでのGoogle検索については以上です。あなたのコンピュータからの異常なトラフィックがある場合は、注意して使用してください。Googleによってブロックされる可能性があります。