谷歌自定义搜索API,如何使用Java以编程方式遍历谷歌结果页面?

时间:2012-07-02 08:20:20

标签: java json parsing google-search-api google-custom-search

以下代码取自: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,但他们提到它是估计数。那么,如何获得这项服务的好处并获得实际的结果数量或页数以便遍历它们?我为每个页面发出新查询没有任何意义。

1 个答案:

答案 0 :(得分:0)

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

  2. 对于单个查询,Google不会立即返回所有结果。如果您搜索Java,大约有214,000,000个结果?归还他们都会持续几天,无论如何你都无法对他们做任何有意义的事情。因此,如果有多个页面,则必须为每个页面执行新查询,就像使用浏览器进行Google搜索一样。大多数情况下,有趣的结果都在第一页或第二页。回报超过这将浪费资源。

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