`

使用Java调用谷歌搜索

    博客分类:
  • j2se
 
阅读更多

转自:http://yangshangchuan.iteye.com/blog/1961059

 

search-demo托管于github

 

search-demo演示了如何利用Java来调用百度搜索和谷歌搜索,更多细节请到github上查看search-demo

 

自己没搜索引擎,又想要大规模的数据源,怎么办?可以对百度搜索和谷歌搜索善加利用,以小搏大,站在巨人的肩膀上。有很多的应用场景可以很巧妙地借助百度搜索和谷歌搜索来实现,比如网站的新闻采集,比如技术、品牌的新闻跟踪,比如知识库的收集,比如人机问答系统等,我之前做的一个准确率达百分之九十几的人机问答系统的数据源,其中一部分就是充分利用了百度搜索和谷歌搜索。在此演示的技术的基础上,可以容易地扩展到其他的搜索引擎,可以借鉴使用的NekoHTML+XPath技术,轻松获取页面的自定义的内容。
 

Java代码  收藏代码
  1. package org.apdplat.demo.search;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.InputStream;  
  5. import java.io.UnsupportedEncodingException;  
  6. import java.net.URLEncoder;  
  7. import java.util.ArrayList;  
  8. import java.util.List;  
  9.   
  10. import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;  
  11. import org.apache.commons.httpclient.HttpClient;  
  12. import org.apache.commons.httpclient.HttpStatus;  
  13. import org.apache.commons.httpclient.methods.GetMethod;  
  14. import org.apache.commons.httpclient.params.HttpMethodParams;  
  15. import org.json.JSONArray;  
  16. import org.json.JSONException;  
  17. import org.json.JSONObject;  
  18. import org.slf4j.Logger;  
  19. import org.slf4j.LoggerFactory;  
  20.   
  21. public class GoogleSearcher {  
  22.   
  23.     private static final Logger LOG = LoggerFactory.getLogger(GoogleSearcher.class);  
  24.   
  25.     public static List<Webpage> searchGoogle(String url) {  
  26.         List<Webpage> webpages = new ArrayList<>();  
  27.         try {  
  28.             HttpClient httpClient = new HttpClient();  
  29.             GetMethod getMethod = new GetMethod(url);  
  30.   
  31.             httpClient.executeMethod(getMethod);  
  32.             getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,  
  33.                     new DefaultHttpMethodRetryHandler());  
  34.   
  35.             int statusCode = httpClient.executeMethod(getMethod);  
  36.             if (statusCode != HttpStatus.SC_OK) {  
  37.                 LOG.error("搜索失败: " + getMethod.getStatusLine());  
  38.                 return null;  
  39.             }  
  40.             InputStream in = getMethod.getResponseBodyAsStream();  
  41.             byte[] responseBody = Tools.readAll(in);  
  42.             String response = new String(responseBody, "UTF-8");  
  43.             LOG.debug("搜索返回数据:" + response);  
  44.             JSONObject json = new JSONObject(response);  
  45.             String totalResult = json.getJSONObject("responseData").getJSONObject("cursor").getString("estimatedResultCount");  
  46.             int totalResultCount = Integer.parseInt(totalResult);  
  47.             LOG.info("搜索返回记录数: " + totalResultCount);  
  48.   
  49.             JSONArray results = json.getJSONObject("responseData").getJSONArray("results");  
  50.   
  51.             LOG.debug("搜索结果:");  
  52.             for (int i = 0; i < results.length(); i++) {  
  53.                 Webpage webpage = new Webpage();  
  54.                 JSONObject result = results.getJSONObject(i);  
  55.                 //提取标题  
  56.                 String title = result.getString("titleNoFormatting");  
  57.                 LOG.debug("标题:" + title);  
  58.                 webpage.setTitle(title);  
  59.                 //提取摘要  
  60.                 String summary = result.get("content").toString();  
  61.                 summary = summary.replaceAll("<b>""");  
  62.                 summary = summary.replaceAll("</b>""");  
  63.                 summary = summary.replaceAll("\\.\\.\\.""");  
  64.                 LOG.debug("摘要:" + summary);  
  65.                 webpage.setSummary(summary);  
  66.                 //从URL中提取正文  
  67.                 String _url = result.get("url").toString();  
  68.                 webpage.setUrl(_url);  
  69.                 String content = Tools.getHTMLContent(_url);  
  70.                 LOG.debug("正文:" + content);  
  71.                 webpage.setContent(content);  
  72.                 webpages.add(webpage);  
  73.             }  
  74.         } catch (IOException | JSONException | NumberFormatException e) {  
  75.             LOG.error("执行搜索失败:", e);  
  76.         }  
  77.         return webpages;  
  78.     }  
  79.   
  80.     public static void main(String args[]) {  
  81.         String query = "杨尚川";  
  82.         try {  
  83.             query = URLEncoder.encode(query, "UTF-8");  
  84.         } catch (UnsupportedEncodingException e) {  
  85.             LOG.error("url构造失败", e);  
  86.             return;  
  87.         }  
  88.         String url = "http://ajax.googleapis.com/ajax/services/search/web?start=0&rsz=large&v=1.0&q=" + query;  
  89.         List<Webpage> webpages = searchGoogle(url);  
  90.         if (webpages != null) {  
  91.             int i = 1;  
  92.             for (Webpage webpage : webpages) {  
  93.                 LOG.info("搜索结果 " + (i++) + " :");  
  94.                 LOG.info("标题:" + webpage.getTitle());  
  95.                 LOG.info("URL:" + webpage.getUrl());  
  96.                 LOG.info("摘要:" + webpage.getSummary());  
  97.                 LOG.info("正文:" + webpage.getContent());  
  98.                 LOG.info("");  
  99.             }  
  100.         } else {  
  101.             LOG.error("没有搜索到结果");  
  102.         }  
  103.     }  
  104. }  
分享到:
评论

相关推荐

    java 谷歌搜索架构

    Java谷歌搜索架构是一种基于Java技术实现的网络爬虫系统,旨在模拟谷歌搜索引擎的工作流程,用于抓取、处理和索引互联网上的网页数据。这个系统通常包括以下几个关键组件: 1. **爬虫(Web Crawler)**:作为整个...

    jsp,java实现谷歌地图,查询地图功能

    本项目专注于使用JSP和Java来集成并实现谷歌地图的查询功能。下面将详细阐述这一技术实现的关键知识点。 1. **JSP基础**: - JSP生命周期:包括翻译、初始化、服务和销毁四个阶段,开发者主要在服务阶段编写业务...

    java版本的谷歌的图片检索功能

    本程序基于Java编程语言,实现了谷歌的图片检索算法,允许用户通过提取图片的特征来进行高效的相似图搜索。 1. **图片特征提取** 在图片检索中,关键步骤是提取图片的特征。谷歌的图片检索技术可能使用了诸如SIFT...

    Java JDK API谷歌翻译版

    《Java JDK API谷歌翻译版》是为Java程序员提供的一款便捷的中文参考工具,它将官方的JDK API文档翻译成了中文,便于国内开发者理解和查阅。这个压缩包包含了两个主要文件和一个使用说明文档,分别是“jdk api 1.8_...

    百度、谷歌搜索引擎API.zip

    本资源"百度、谷歌搜索引擎API.zip"提供了与这两个知名搜索引擎交互的接口,允许开发者直接调用API来实现搜索功能,为用户带来便捷的搜索体验。 首先,我们来看百度搜索引擎API。百度提供了Baidu Open API平台,...

    google-search-results-java:谷歌搜索结果 JAVA API 通过 SerpApi

    谷歌搜索结果 JAVA API 这个 Java 包可以使用抓取和解析 Google、Bing 和百度搜索结果。 随意 fork 这个存储库以添加更多后端。 该项目是 Java 7 中 SerpApi 的实现。此代码依赖 GSON 进行高效的 JSON 处理。 ...

    模拟Google搜索 JSP java

    在本项目中,"模拟Google搜索 JSP java" 的目标是利用这些技术创建一个类似于Google搜索引擎的功能,允许用户输入关键词并返回相关结果。这个过程涉及了多个知识点,包括但不限于以下几个方面: 1. **JSP基础**:...

    Python调用谷歌浏览器打开百度

    通过以上步骤,我们可以创建一个简单的Python程序,使用Selenium调用谷歌浏览器打开百度,并进行搜索操作。这个程序展示了Python与Selenium的结合在网页自动化中的应用,对于测试工程师、Web开发者以及需要自动化...

    仿GOOGLE搜索下拉框的JAVA项目,struts2+hibernate+mysql

    该项目是一个基于JAVA技术栈的搜索下拉框实现,旨在模仿谷歌搜索引擎的实时搜索建议功能。主要采用了Struts2作为MVC框架,Hibernate作为对象关系映射(ORM)工具,MySQL作为数据库存储,以及Ajax进行异步数据交互。...

    史上最全谷歌浏览器常用书签,适合java开发人员使用

    谷歌浏览器(Google Chrome)是许多Java开发者首选的Web浏览工具,其丰富的扩展程序和便捷的书签管理功能为程序员提供了高效的工作环境。本资源“史上最全谷歌浏览器常用书签”显然是针对Java开发者精心整理的一系列...

    java jdk 1.8API文档谷歌翻译版本

    Java JDK 1.8 API文档是Java开发人员的重要参考资料,它包含了Java标准版(SE)1.8版本的所有核心类库、接口和...通过阅读和理解这个API文档,开发者可以更好地掌握Java语言的特性和使用方法,提升编程效率和代码质量。

    jsp仿谷歌搜索

    【JSP仿谷歌搜索连接数据库】是一个典型的Web开发项目,主要使用Java Server Pages(JSP)技术来构建一个类似于谷歌搜索引擎的功能。在这个项目中,核心知识点主要包括以下几个方面: 1. **JSP基础**:JSP是Java的...

    java jdk api 中文文档 谷歌翻译 1.8

    这个"java jdk api 中文文档 谷歌翻译 1.8"是将原始的英文API文档通过谷歌翻译工具转化成中文版,便于中文使用者学习和查阅。 Java JDK 1.8是Java的一个重要版本,它引入了许多新特性,包括: 1. **Lambda表达式**...

    Google Map Api 调用样例程序(Java版)

    2. **API密钥**:在调用Google Map API时,需要一个有效的API密钥,这通常会存储在配置文件或环境变量中,确保安全。 3. **位置标记**:Java代码可能包含方法来创建和管理`Marker`对象,这些对象表示地图上的特定点...

    java jdk 8 中文 英文帮助文档 谷歌翻译

    这个中文英文帮助文档是为了方便中国开发者更好地理解和使用JDK 8的功能。虽然文档是通过谷歌翻译生成的,可能在某些专业术语或语境上存在不准确之处,但它仍然是一个有价值的参考资源,尤其对于初学者和英语不太...

    为网站添加搜索功能类似于在google里搜索自己的网站(java语言版)

    这个项目的目标是教你如何使用Java编程语言来实现一个自定义的搜索功能,使用户能够在你的网站上像在Google一样方便地搜索内容。这一功能不仅提升了用户体验,也提高了网站信息的可访问性。 【描述】:在实现这个...

    Android谷歌地图(java)

    在Android平台上,集成和使用谷歌地图服务是一项常见的需求。这个项目是基于Java语言实现的,因此,我们将深入探讨如何在Android应用中集成谷歌地图API,使用Java编程语言进行地图功能的开发。 首先,我们需要了解...

    完全仿谷歌搜索 显示信息条数

    本文将详细解析"完全仿谷歌搜索 显示信息条数"这一主题,涵盖智能提示、自动回传、谷歌搜索效果的实现、AJAX技术的应用,以及如何在搜索结果中显示数据总数。 首先,我们要理解智能提示(Auto-suggestion)是提高...

    搜索引擎 谷歌 百度 实例

    谷歌搜索引擎是全球最大的搜索引擎,其核心技术包括PageRank算法和Panda、Penguin、Hummingbird等一系列更新。PageRank是评估网页重要性的基础,它考虑了网页之间的链接结构。Panda更新则关注内容质量,旨在提升高...

    Google Maps V2.3.2 for Java (google map手机版含证书)中文版

    4. **软件简介.txt**:这份文本文件很可能是对应用的简要介绍,包含使用方法、功能概述等内容,帮助用户更好地理解和使用谷歌地图。 三、Java平台适应性 Java平台的跨平台特性使得这款谷歌地图能够在多种不同品牌...

Global site tag (gtag.js) - Google Analytics