获取信息是否存在谷歌搜索结果(JAVA)
问题描述:
我尝试解析谷歌的搜索结果。我需要的不是搜索结果本身,而是我需要的信息是否存在搜索结果!获取信息是否存在谷歌搜索结果(JAVA)
现在我的问题是我想搜索组合的字符串。例如。 “最大测试人员”。 现在谷歌真的很好,并告诉我: 我们未能找到“Max Testperson”的搜索结果,而是用于Max Testperson。但是!我不需要Max Testperson,我需要“Max Testperson”。
因此,基本上我对搜索结果本身不感兴趣,而是对搜索结果之前的部分(是否可以找到搜索字符串!)感兴趣。
我曾经在java中下面的教程: http://mph-web.de/web-scraping-with-java-top-10-google-search-results/
有了这个,我可以解析的搜索结果。但就像我说的!没有必要!我只想知道我的搜索字符串是否存在。由于谷歌删除 - >“”< - 我得到的搜索结果反正。
任何人都可以帮我解决这个问题吗?
答
尝试将GET参数nfpr=1
添加到您的搜索禁用自动校正功能:
final Document doc = Jsoup.connect("https://google.com/search?q=test"+"&nfpr=1").userAgent(USER_AGENT).get();
更新:
您可以解析为关于没有结果的消息:
public class App {
public static final String USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36";
public static void main(String[] args) throws Exception {
String searchTerm = "\"daniel+nasseh\"+\"26.02.1987\"";
boolean hasExactResults = true;
final Document doc = Jsoup.connect("https://google.com/search?q=" + searchTerm + "&nfpr=1")
.userAgent(USER_AGENT).get();
Elements noResultMessage = doc.select("div.e.obp div.med:first-child");
if (!noResultMessage.isEmpty()) {
hasExactResults = false;
for (Element result : noResultMessage) {
System.out.println(result.text());
}
}
if (hasExactResults) {
// Traverse the results
for (Element result : doc.select("h3.r a")) {
final String title = result.text();
final String url = result.attr("href");
System.out.println(title + " -> " + url);
}
}
}
}
更新2:从Donselm自己在评论中提出的最佳解决方案是添加&tbs=li:1
,迫使搜索精确的搜索词
String searchTerm = "\"daniel+nasseh\"+\"26.02.1987\"";
final Document doc = Jsoup.connect("https://google.com/search?q=" + searchTerm + "&tbs=li:1").userAgent(USER_AGENT).get();
也许这是值得看看[谷歌自定义搜索(https://developers.google.com/custom-search/)。 – SubOptimal
您应该提供更好的测试用例,因为有“Max Testperson”的搜索结果。例如,“Max Testprson”就是一个很好的例子。 –