2012-07-02 37 views
1

以下代碼取自:Java code for using google custom search API。它能正確地提取Google搜索結果頁面中第一頁的前10個結果。谷歌自定義搜索API,如何使用Java以編程方式遍歷谷歌結果頁?

public static void main(String[] args) throws Exception {  
String key="YOUR KEY";  
String qry="Android";  
URL url = new URL("https://www.googleapis.com/customsearch/v1? 
key="+key+ "&cx=013036536707430787589:_pqjad5hr1a&q="+ qry + "&alt=json");  

HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
conn.setRequestMethod("GET");  
conn.setRequestProperty("Accept", "application/json");  
BufferedReader br = 
new BufferedReader(new InputStreamReader((conn.getInputStream())));  
String output;  
System.out.println("Output from Server .... \n");  
while ((output = br.readLine()) != null) 
{   
    if(output.contains("\"link\": \"")) 
    {        
    String link=output.substring(output.indexOf("\"link\": \"")+ 
    ("\"link\": \"").length(), output.indexOf("\","));    
    System.out.println(link);  //Will print the google search links   
    }   
}  
conn.disconnect();        
} 

我想弄清楚如何遍歷所有結果頁?通過搜索https://developers.google.com/custom-search/v1/using_rest我發現查詢中的start參數反映了索引,很顯然,通過在循環中更改此值可以達到目的,但會花費我對每個頁面的查詢(這不應該是這種情況,因爲它不是一個新的查詢,它是相同的查詢,但只是新的頁面)。此外,我發現谷歌已經提到,如果查詢成功,響應數據包含值爲totalResults的總體結果,但他們提到它是估計數。那麼,如何才能獲得這項服務的好處並獲得實際的結果數量或頁面數量以便遍歷它們?我沒有任何意義,我發出每個頁面的新查詢。

+0

@Pargat:檢查這個問題plz。 –

回答

0
  1. 您應該使用JSON解析器從結果中提取數據,而不是自己解析結果。

  2. 對於單個查詢,Google不會一次返回所有結果。如果您搜索Java,那麼大約有214,000,000個結果?將它們全部歸還將持續幾天,無論如何你都無法對它們做任何有意義的事情。因此,如果有多個頁面,則必須爲每個頁面執行一個新查詢,就像您在使用瀏覽器進行Google搜索時一樣。大多數時候,有趣的結果在第一頁或第二頁。不止如此,會浪費資源。

  3. 谷歌並不知道確切的結果數量。它返回一個估計值。計算結果的確切數量將會很難。知道有214,000,001結果,而不是214,000,002沒有任何價值,並且確切的數字將立即過時。

+0

在所有情況下,Google不會得到214,000,000個結果。這只是一個估計,最大的結果是100個結果頁面,每個鏈接10個鏈接。但對我來說,谷歌並不需要爲每個頁面提供單個查詢。 –

+0

如果我需要使用Json解析器。我如何才能在第一個地方獲得Json結果? –

+0

JSON解析器將JSON字符串轉換爲對象。不再需要子字符串。 –