2014-12-27 116 views
0

此問題以前已被詢問過很多次。然而,一些API隨着時間的推移已經發生了變化,我想知道實現這一點的好方法。用於檢索谷歌搜索結果的Java Web爬蟲

最好的方法是使用谷歌搜索API。然而,https://developers.google.com/custom-search/json-api/v1/overview表示每天只有100個免費搜索查詢。我會需要更多,我不想花錢去做。

我嘗試過使用簡單的REST API,但是它的大部分JavaScript代碼,我似乎沒有找到我需要的響應。

我試過使用一些庫,如http://jsoup.org/,但是,即使它的響應不包含我需要的信息。

回答

1

我嘗試使用Jsoup和它的工作,雖然前幾個結果包括一些不需要的字符。以下是我的代碼

package crawl_google; 
import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.nodes.Element; 
import org.jsoup.select.Elements; 
public class googleResults { 
public static void main(String[] args) throws Exception{ 
//pass the search query and the number of results as parameters 
google_results("Natural Language Processing", 10); 
} 
public static void google_results(String keyword, int no_of_results) throws Exception 
{ 
//Replace space by + in the keyword as in the google search url 
keyword = keyword.replace(" ", "+"); 
String url = "https://www.google.com/search?q=" + keyword + "&num=" + String.valueOf(no_of_results); 
//Connect to the url and obain HTML response 
Document doc = Jsoup 
.connect(url) 
.userAgent("Mozilla") 
.timeout(5000).get(); 
//parsing HTML after examining DOM 
Elements els = doc.select("li.g"); 
for(Element el : els) 
{ 
//Print title, site and abstract 
System.out.println("Title : " + el.getElementsByTag("h3").text()); 
System.out.println("Site : " + el.getElementsByTag("cite").text()); 
System.out.println("Abstract : " + el.getElementsByTag("span").text() + "\n"); 
} 
} 
}