JavaでGoogle検索結果を解析する方法?
Googleは素晴らしいリソースですが、Google検索結果を本当に解析するAPIはありません.これは、Googleの検索結果を解析するのに役立つと書いたJavaコードです.
どのようにGoogle検索動作しますか?
たとえば、あなたが「JavaでGoogle検索結果を解析する方法」を捜しているならば、これはあなたが打つことを望むURLです:https://www.google.com/search?q=How+to+parse+Google+Search+result+in+Java&num=10
“Q”の後の部分は、クエリと“num”を渡すために使用されます:これはどのように多くの結果を返すようにGoogleに指示します.
HTML検索結果
これはGoogleを検索し、ページのHTMLを返すコードです.
の検索結果からの解析結果
Google検索から本当の結果を見つけたいだけです、そして、これのために、我々はJavaでこの単純なjSinkベースのHTMLパーサーを使うことができます:
Google検索結果URLは「/url ??」で始まるので、この文字列を削除するためにregexを使います.また、URLは“& sa =”に続くので、我々はこの文字でストリングを分割して、URLの最初の部分を使います.
フルコードはhttps://system.camp/searching-google-results-and-parsing-in-java/
どのようにGoogle検索動作しますか?
たとえば、あなたが「JavaでGoogle検索結果を解析する方法」を捜しているならば、これはあなたが打つことを望むURLです:https://www.google.com/search?q=How+to+parse+Google+Search+result+in+Java&num=10
“Q”の後の部分は、クエリと“num”を渡すために使用されます:これはどのように多くの結果を返すようにGoogleに指示します.
HTML検索結果
これはGoogleを検索し、ページのHTMLを返すコードです.
/**
* The method will return the search page result in a {@link String} object
*
* @param googleSearchQuery the google search query
* @return the content as {@link String} object
* @throws Exception
*/
public static String getSearchContent(String googleSearchQuery) throws Exception {
//URL encode string in JAVA to use with google search
System.out.println("Searching for: " + googleSearchQuery);
googleSearchQuery = googleSearchQuery.trim();
googleSearchQuery = URLEncoder
.encode(googleSearchQuery, StandardCharsets.UTF_8.toString());
String queryUrl = "https://www.google.com/search?q=" + googleSearchQuery + "&num=10";
System.out.println(queryUrl);
final String agent = "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)";
URL url = new URL(queryUrl);
final URLConnection connection = url.openConnection();
/**
* User-Agent is mandatory otherwise Google will return HTTP response
* code: 403
*/
connection.setRequestProperty("User-Agent", agent);
final InputStream stream = connection.getInputStream();
return getString(stream);
}
上記のコードは「URL」を与えられた検索用語ストリングをコード化して、それから与えられた検索ストリングでGoogleを呼び出して、結果をURLConnectionクラスを使用しているJavaで返すでしょう.あなたは、Googleがあなたをブロックするのを防ぐために、同様にヘッダーを変えることができます.の検索結果からの解析結果
Google検索から本当の結果を見つけたいだけです、そして、これのために、我々はJavaでこの単純なjSinkベースのHTMLパーサーを使うことができます:
/**
* Parse all links
*
* @param html the page
* @return the list with all URLSs
* @throws Exception
*/
public static List<String> parseLinks(final String html) throws Exception {
List<String> result = new ArrayList<String>();
Document doc = Jsoup.parse(html);
Elements results = doc.select("a > h3");
for (Element link : results) {
Elements parent = link.parent().getAllElements();
String relHref = parent.attr("href");
if (relHref.startsWith("/url?q=")) {
relHref = relHref.replace("/url?q=", "");
}
String[] splittedString = relHref.split("&sa=");
if (splittedString.length > 1) {
relHref = splittedString[0];
}
//System.out.println(relHref);
result.add(relHref);
}
return result;
}
上記のコードは少しトリッキーです.それで、「A」の中で最初に「H 3」要素を見つけています.次に、現在のノードの親要素を見ます.親ノードから、URLを見つけます.Google検索結果URLは「/url ??」で始まるので、この文字列を削除するためにregexを使います.また、URLは“& sa =”に続くので、我々はこの文字でストリングを分割して、URLの最初の部分を使います.
フルコードはhttps://system.camp/searching-google-results-and-parsing-in-java/
Reference
この問題について(JavaでGoogle検索結果を解析する方法?), 我々は、より多くの情報をここで見つけました https://dev.to/itsshashank/how-to-parse-google-search-result-in-java-3303テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol