[英]Jsoup Google Search Results
我試圖解析谷歌搜索結果的HTML以獲取每個結果的標題。 這是通過android在一個私有嵌套類中完成的,如下所示:
private class WebScraper extends AsyncTask<String, Void, String> {
public WebScraper() {}
@Override
protected String doInBackground(String... urls) {
Document doc;
try {
doc = Jsoup.connect(urls[0]).get();
} catch (IOException e) {
System.out.println("Failed to open document");
return "";
}
Elements results = doc.getElementsByClass("rc");
int count = 0;
for (Element lmnt : results) {
System.out.println(count++);
System.out.println(lmnt.text());
}
System.out.println("Count is : " + count);
String key = "test";
//noinspection Since15
SearchActivity.this.songs.put(key, SearchActivity.this.songs.getOrDefault(key, 0) + 1);
// return requested
return "";
}
}
我要解析的示例網址: http : //www.google.com/#q = i + might + site: genius.com
由於某種原因,當我運行上面的代碼時,我的計數打印為0,因此沒有元素存儲在結果中。 任何幫助深表感謝! PS文檔肯定已初始化,HTML頁面正確加載
此代碼將在Google中搜索“Apple”之類的字詞,並從結果中獲取所有鏈接並顯示其標題和網址。 它可以在google檢測到並停止給出結果后的一天內搜索最多500個單詞。
search="Apple"; //your word to be search on google
String userAgent = "ExampleBot 1.0 (+http://example.com/bot)";
Elements links=null;
try {
links = Jsoup.connect(google +
URLEncoder.encode(search,charset)).
userAgent(userAgent).get().select(".g>.r>a");
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
for (Element link : links) {
String title = link.text();
String url = link.absUrl("href"); // Google returns URLs in
format "http://www.google.com/url?q=<url>&sa=U&ei=<someKey>".
try {
url = URLDecoder.decode(url.substring(url.indexOf('=') +
1, url.indexOf('&')), "UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (!url.startsWith("http")) {
continue; // Ads/news/etc.
}
System.out.println("Title: " + title);
System.out.println("URL: " + url);
}
如果您查看Google頁面的源代碼,您會注意到它不包含瀏覽器中正常顯示的任何文本數據 - 只有一堆javascript代碼。 這意味着Google會動態輸出所有搜索結果。
Jsoup將獲取該javascript代碼,並且它不會找到任何帶有“rc”類的html代碼,這就是為什么在代碼示例中得到零計數的原因。
請考慮使用Google的公共搜索API,而不是直接解析其html網頁: https : //developers.google.com/custom-search/ 。
我完全同意Matvey Sidorenko,但是要使用Google公共搜索API,您需要擁有Google Api密鑰 。 但問題是谷歌限制每個api密鑰100次搜索 ,超過這個搜索 ,它會停止工作並在24小時內重置。
最近我正在開發一個項目,我們需要為用戶提供的不同查詢獲取谷歌搜索結果鏈接,以便克服這個API限制問題,我制作了自己的API直接在google / ncr上搜索並給你結果鏈接。
免費的Google搜索API- http://freegoogleapi.azurewebsites.net/或http://google.bittque.com
我使用HTML-UNIT庫來制作這個API。
您可以使用我的API,也可以使用HTML UNIT庫來實現您的需求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.