`
wbj0110
  • 浏览: 1550681 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

使用Java调用谷歌搜索(转)

阅读更多

search-demo托管于github

 

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

 

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

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 implements Searcher{  
  22.     private static final Logger LOG = LoggerFactory.getLogger(GoogleSearcher.class);  
  23.   
  24.     @Override  
  25.     public List<Webpage> search(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.           
  90.         Searcher searcher = new GoogleSearcher();  
  91.         List<Webpage> webpages = searcher.search(url);  
  92.         if (webpages != null) {  
  93.             int i = 1;  
  94.             for (Webpage webpage : webpages) {  
  95.                 LOG.info("搜索结果 " + (i++) + " :");  
  96.                 LOG.info("标题:" + webpage.getTitle());  
  97.                 LOG.info("URL:" + webpage.getUrl());  
  98.                 LOG.info("摘要:" + webpage.getSummary());  
  99.                 LOG.info("正文:" + webpage.getContent());  
  100.                 LOG.info("");  
  101.             }  
  102.         } else {  
  103.             LOG.error("没有搜索到结果");  
  104.         }  
  105.     }  
  106. }  

 

 

分享到:
评论

相关推荐

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

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

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

    元搜索开发必不可少的东东,直接调用API就可以实现搜索引擎,,让自己的网站实现搜索,很实用,,里面还有好多实例,,java源码

    JAVA分页完美解决方案修订版

    JAVA分页是个经典问题,本人从网上搜集资料,并通过编程,较为完美地决地了这个问题,浏览、增加、删除、修改、查看、搜索都可以回到原来的页码,源码已经上传CSDN,值得下载! 我的方案是用两个TAG完成分页显示数据...

    搜索引擎搜索

    在java 程序中调用百度或谷歌搜索引擎搜索关键字并分析得到的网页代码。获得url 标题 摘要等。源代码

    基于Java和CNN网络实现垃圾识别分类安卓APP源码+项目说明文档.zip

    图像识别运行流程为安卓客户端调用图库或图像头权限-&gt;选择图片-&gt;图片上传到后端-&gt;后端使用命令行操作调用算法predict-&gt;后端得到预测结果-&gt;返回至前端(后续可使用TensorFlow Mobile 把深度学习模型转化为pb格式文件...

    GridImageSearch:使用Google API搜索来搜索图像

    Android Bootcamp Week2项目-网格图像搜索使用Google API搜索来搜索图像 用户可以输入搜索查询,该查询将显示来自Google Image API的图像结果网格。 用户可以点击结果中的任何图像以全屏查看图像 图像结果显示在一个...

    bpmndemo.zip

    java中识别文字比较简单,使用的软件是tesseractocr(使用的版本是3.02,3以后的版本才支持中文),这个软件需要安装在本地电脑中,安装的过程中全部都按照默认进行安装(以便于Java直接调用),建议使用winRAR解压...

    ImageSearch:android项目使用google API图片搜索

    图片搜索android项目使用google API图片搜索 用户故事: 必须完成以下用户故事: User can enter a search query that will display a grid of image results from the Google Image API.User can click on ...

    ysc-QuestionAnsweringSystem-QuestionAnsweringSystem-1.1-125-gbb52537

    包括web和本地版的问答系统 ,调用百度或谷歌搜索引擎

    Google Android SDK开发范例大全(PDF高清完整版1)(4-1)

    9.2 Google搜索——AutoCompleteTextView与GoogleSearchAPI 9.3 前端产生QRCode二维条形码——GoogleChartAPI 9.4 以经纬度查找目的地位置——GeoPoint与MapView的搭配运用 9.5 GPSGoogle地图——LocationListener与...

    App-blue-search:Alfresco的“类似Google的功能”

    谷歌搜索 方面导航 高级搜索 细节 您必须自定义Alfresco Share和Aiku页面: Alfresco分享: 登录页面(自动) 搜索页面 搜索结果页面 进阶搜寻页面 文档详细信息页面 爱菊: 多面搜索页面 根据要修改的页面类型...

    新版Android开发教程.rar

    程序可以采用 JAVA 开发,但是因为它的虚拟机 (Virtual Machine) Dalvik ,是将 JAVA 的 bytecode 转成 自 己的格式,回避掉需要付给 SUN 有关 JAVA 的授权费用。 对手机制造者的影响 � Android 是款开源的移动计算...

    javascript使用window.open提示“已经计划系统关机”的原因

    于是改用谷歌搜索相关英文内容,serverfault.com上也有人碰到过这个问题,满意答案还比较靠谱:IE8 script error 800704a6? 代码如下: The only information I’ve been able to find on this error is from Josh ...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    GCF 谷歌内嵌浏览器框架, 使用此插件,用户可以通过Internet Explorer的用户界面,以Chrome内核的渲染方式浏览网页。Chrome Frame 会把最新版的Chrome Webkit 内核和JavaScript 引擎注入到IE中, IE浏览器将获得...

    JspRun!社区论坛系统 v6.0.0 build 20110516 GBK 安装版.zip

    的基础架构采用世界上最先进流行的 web 编程组合 JAVA MySQL 实现,是一个经过完善设计,适用于各种服务器环境的高效论坛系统解决方案。系统采用struts、hibernate框架及中间件的结合既实现了业务逻辑与控制逻辑的...

    JspRun!社区论坛系统 v6.0.0 build 20110516 UTF-8 源码版.zip

    的基础架构采用世界上最先进流行的 web 编程组合 JAVA MySQL 实现,是一个经过完善设计,适用于各种服务器环境的高效论坛系统解决方案。系统采用struts、hibernate框架及中间件的结合既实现了业务逻辑与控制逻辑的...

    JspRun!社区论坛系统 v6.0.0 build 20110516 GBK 源码版.zip

    的基础架构采用世界上最先进流行的 web 编程组合 JAVA MySQL 实现,是一个经过完善设计,适用于各种服务器环境的高效论坛系统解决方案。系统采用struts、hibernate框架及中间件的结合既实现了业务逻辑与控制逻辑的...

    JspRun!社区论坛系统 v6.0.0 build 20110516 UTF-8 安装版.zip

    的基础架构采用世界上最先进流行的 web 编程组合 JAVA MySQL 实现,是一个经过完善设计,适用于各种服务器环境的高效论坛系统解决方案。系统采用struts、hibernate框架及中间件的结合既实现了业务逻辑与控制逻辑的...

    MiniGoogle:由搜寻器,索引器,PageRank,MapReduce框架,搜索算法和前端组成

    迷你谷歌由搜寻器,索引器,PageRank,MapReduce框架,搜索算法和前端组成。 搜寻器,索引器和pagerank作为mapreduce作业运行。 该系统利用了一个主节点和八个工作/数据节点,这些节点通过REST调用进行通信。

Global site tag (gtag.js) - Google Analytics