1

以下代码取自:Java code for using google custom search API。它可以正常提取谷歌结果页面中第一页的前 10 个结果。

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总结果的值,但他们提到它是估计数。那么,如何才能从这项服务中受益并获得实际的结果数或页面数以便遍历它们呢?我为每个页面发出新查询没有任何意义。

4

1 回答 1

0
  1. 您应该使用 JSON 解析器从结果中提取数据,而不是自己解析结果。

  2. Google 不会针对单个查询一次返回所有结果。如果搜索 Java,大约有 214,000,000 个结果?将它们全部归还会持续几天,而且无论如何您都无法对它们做任何有意义的事情。因此,如果有多个页面,您必须为每个页面执行一个新查询,就像使用浏览器进行 Google 搜索一样。大多数时候,有趣的结果在第一页或第二页。返还更多会浪费资源。

  3. 谷歌不知道结果的确切数量。它返回一个估计值。计算结果的确切数量太难了。知道有 214,000,001 个结果而不是 214,000,002 个结果并没有任何价值,而且确切的数字无论如何都会立即过时。

于 2012-07-08T21:27:13.077 回答