search-demo演示了如何利用Java来调用百度搜索和谷歌搜索,更多细节请到github上查看search-demo
自己没搜索引擎,又想要大规模的数据源,怎么办?可以对百度搜索和谷歌搜索善加利用,以小搏大,站在巨人的肩膀上。有很多的应用场景可以很巧妙地借助百度搜索和谷歌搜索来实现,比如网站的新闻采集,比如技术、品牌的新闻跟踪,比如知识库的收集,比如人机问答系统等,我之前做的一个准确率达百分之九十几的人机问答系统的数据源,其中一部分就是充分利用了百度搜索和谷歌搜索。在此演示的技术的基础上,可以容易地扩展到其他的搜索引擎,可以借鉴使用的NekoHTML+XPath或JSoup+CSSPath技术,轻松获取页面的自定义的内容。
- package org.apdplat.demo.search;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.UnsupportedEncodingException;
- import java.net.URLEncoder;
- import java.util.ArrayList;
- import java.util.List;
- import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
- import org.apache.commons.httpclient.HttpClient;
- import org.apache.commons.httpclient.HttpStatus;
- import org.apache.commons.httpclient.methods.GetMethod;
- import org.apache.commons.httpclient.params.HttpMethodParams;
- import org.json.JSONArray;
- import org.json.JSONException;
- import org.json.JSONObject;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- public class GoogleSearcher implements Searcher{
- private static final Logger LOG = LoggerFactory.getLogger(GoogleSearcher.class);
- @Override
- public List<Webpage> search(String url) {
- List<Webpage> webpages = new ArrayList<>();
- try {
- HttpClient httpClient = new HttpClient();
- GetMethod getMethod = new GetMethod(url);
- httpClient.executeMethod(getMethod);
- getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
- new DefaultHttpMethodRetryHandler());
- int statusCode = httpClient.executeMethod(getMethod);
- if (statusCode != HttpStatus.SC_OK) {
- LOG.error("搜索失败: " + getMethod.getStatusLine());
- return null;
- }
- InputStream in = getMethod.getResponseBodyAsStream();
- byte[] responseBody = Tools.readAll(in);
- String response = new String(responseBody, "UTF-8");
- LOG.debug("搜索返回数据:" + response);
- JSONObject json = new JSONObject(response);
- String totalResult = json.getJSONObject("responseData").getJSONObject("cursor").getString("estimatedResultCount");
- int totalResultCount = Integer.parseInt(totalResult);
- LOG.info("搜索返回记录数: " + totalResultCount);
- JSONArray results = json.getJSONObject("responseData").getJSONArray("results");
- LOG.debug("搜索结果:");
- for (int i = 0; i < results.length(); i++) {
- Webpage webpage = new Webpage();
- JSONObject result = results.getJSONObject(i);
- //提取标题
- String title = result.getString("titleNoFormatting");
- LOG.debug("标题:" + title);
- webpage.setTitle(title);
- //提取摘要
- String summary = result.get("content").toString();
- summary = summary.replaceAll("<b>", "");
- summary = summary.replaceAll("</b>", "");
- summary = summary.replaceAll("\\.\\.\\.", "");
- LOG.debug("摘要:" + summary);
- webpage.setSummary(summary);
- //从URL中提取正文
- String _url = result.get("url").toString();
- webpage.setUrl(_url);
- String content = Tools.getHTMLContent(_url);
- LOG.debug("正文:" + content);
- webpage.setContent(content);
- webpages.add(webpage);
- }
- } catch (IOException | JSONException | NumberFormatException e) {
- LOG.error("执行搜索失败:", e);
- }
- return webpages;
- }
- public static void main(String args[]) {
- String query = "杨尚川";
- try {
- query = URLEncoder.encode(query, "UTF-8");
- } catch (UnsupportedEncodingException e) {
- LOG.error("url构造失败", e);
- return;
- }
- String url = "http://ajax.googleapis.com/ajax/services/search/web?start=0&rsz=large&v=1.0&q=" + query;
- Searcher searcher = new GoogleSearcher();
- List<Webpage> webpages = searcher.search(url);
- if (webpages != null) {
- int i = 1;
- for (Webpage webpage : webpages) {
- LOG.info("搜索结果 " + (i++) + " :");
- LOG.info("标题:" + webpage.getTitle());
- LOG.info("URL:" + webpage.getUrl());
- LOG.info("摘要:" + webpage.getSummary());
- LOG.info("正文:" + webpage.getContent());
- LOG.info("");
- }
- } else {
- LOG.error("没有搜索到结果");
- }
- }
- }
相关推荐
谷歌搜索结果 JAVA API 这个 Java 包可以使用抓取和解析 Google、Bing 和百度搜索结果。 随意 fork 这个存储库以添加更多后端。 该项目是 Java 7 中 SerpApi 的实现。此代码依赖 GSON 进行高效的 JSON 处理。 ...
元搜索开发必不可少的东东,直接调用API就可以实现搜索引擎,,让自己的网站实现搜索,很实用,,里面还有好多实例,,java源码
JAVA分页是个经典问题,本人从网上搜集资料,并通过编程,较为完美地决地了这个问题,浏览、增加、删除、修改、查看、搜索都可以回到原来的页码,源码已经上传CSDN,值得下载! 我的方案是用两个TAG完成分页显示数据...
在java 程序中调用百度或谷歌搜索引擎搜索关键字并分析得到的网页代码。获得url 标题 摘要等。源代码
图像识别运行流程为安卓客户端调用图库或图像头权限->选择图片->图片上传到后端->后端使用命令行操作调用算法predict->后端得到预测结果->返回至前端(后续可使用TensorFlow Mobile 把深度学习模型转化为pb格式文件...
Android Bootcamp Week2项目-网格图像搜索使用Google API搜索来搜索图像 用户可以输入搜索查询,该查询将显示来自Google Image API的图像结果网格。 用户可以点击结果中的任何图像以全屏查看图像 图像结果显示在一个...
java中识别文字比较简单,使用的软件是tesseractocr(使用的版本是3.02,3以后的版本才支持中文),这个软件需要安装在本地电脑中,安装的过程中全部都按照默认进行安装(以便于Java直接调用),建议使用winRAR解压...
图片搜索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 ...
包括web和本地版的问答系统 ,调用百度或谷歌搜索引擎
9.2 Google搜索——AutoCompleteTextView与GoogleSearchAPI 9.3 前端产生QRCode二维条形码——GoogleChartAPI 9.4 以经纬度查找目的地位置——GeoPoint与MapView的搭配运用 9.5 GPSGoogle地图——LocationListener与...
谷歌搜索 方面导航 高级搜索 细节 您必须自定义Alfresco Share和Aiku页面: Alfresco分享: 登录页面(自动) 搜索页面 搜索结果页面 进阶搜寻页面 文档详细信息页面 爱菊: 多面搜索页面 根据要修改的页面类型...
程序可以采用 JAVA 开发,但是因为它的虚拟机 (Virtual Machine) Dalvik ,是将 JAVA 的 bytecode 转成 自 己的格式,回避掉需要付给 SUN 有关 JAVA 的授权费用。 对手机制造者的影响 � Android 是款开源的移动计算...
于是改用谷歌搜索相关英文内容,serverfault.com上也有人碰到过这个问题,满意答案还比较靠谱:IE8 script error 800704a6? 代码如下: The only information I’ve been able to find on this error is from Josh ...
GCF 谷歌内嵌浏览器框架, 使用此插件,用户可以通过Internet Explorer的用户界面,以Chrome内核的渲染方式浏览网页。Chrome Frame 会把最新版的Chrome Webkit 内核和JavaScript 引擎注入到IE中, IE浏览器将获得...
的基础架构采用世界上最先进流行的 web 编程组合 JAVA MySQL 实现,是一个经过完善设计,适用于各种服务器环境的高效论坛系统解决方案。系统采用struts、hibernate框架及中间件的结合既实现了业务逻辑与控制逻辑的...
的基础架构采用世界上最先进流行的 web 编程组合 JAVA MySQL 实现,是一个经过完善设计,适用于各种服务器环境的高效论坛系统解决方案。系统采用struts、hibernate框架及中间件的结合既实现了业务逻辑与控制逻辑的...
的基础架构采用世界上最先进流行的 web 编程组合 JAVA MySQL 实现,是一个经过完善设计,适用于各种服务器环境的高效论坛系统解决方案。系统采用struts、hibernate框架及中间件的结合既实现了业务逻辑与控制逻辑的...
的基础架构采用世界上最先进流行的 web 编程组合 JAVA MySQL 实现,是一个经过完善设计,适用于各种服务器环境的高效论坛系统解决方案。系统采用struts、hibernate框架及中间件的结合既实现了业务逻辑与控制逻辑的...
迷你谷歌由搜寻器,索引器,PageRank,MapReduce框架,搜索算法和前端组成。 搜寻器,索引器和pagerank作为mapreduce作业运行。 该系统利用了一个主节点和八个工作/数据节点,这些节点通过REST调用进行通信。