转自:http://yangshangchuan.iteye.com/blog/1961059
search-demo演示了如何利用Java来调用百度搜索和谷歌搜索,更多细节请到github上查看search-demo
自己没搜索引擎,又想要大规模的数据源,怎么办?可以对百度搜索和谷歌搜索善加利用,以小搏大,站在巨人的肩膀上。有很多的应用场景可以很巧妙地借助百度搜索和谷歌搜索来实现,比如网站的新闻采集,比如技术、品牌的新闻跟踪,比如知识库的收集,比如人机问答系统等,我之前做的一个准确率达百分之九十几的人机问答系统的数据源,其中一部分就是充分利用了百度搜索和谷歌搜索。在此演示的技术的基础上,可以容易地扩展到其他的搜索引擎,可以借鉴使用的NekoHTML+XPath技术,轻松获取页面的自定义的内容。
- 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 {
- private static final Logger LOG = LoggerFactory.getLogger(GoogleSearcher.class);
- public static List<Webpage> searchGoogle(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;
- List<Webpage> webpages = searchGoogle(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完成分页显示数据...
这个程序使用谷歌搜索作为信息通道,试图找出尽可能多的任何人的数据。 它搜索网站并确定该网站是否确实包含有关该人的信息。 设想 你是一名即将毕业的学生,即将申请一系列工作。 你玩得很开心,但现在担心外面...
selenium_cucumberjvm 一个使用cucumber-jvm和selenium进行谷歌搜索的示例项目这是一个多浏览器、多网站自动化框架,它演示了使用两个并行浏览器来测试多用户 web 应用程序,如 google talk 该框架演示了使用 ...
教你怎么使用google 搜索的,谷歌最niub 的一点。。。支持一下吧。
在谷歌上搜索“安装 java jdk”。 选择第一个链接。 你应该去oracle网站。 直接链接是 选择 Java 平台 JDK 链接。 接受许可协议。 为您的操作系统选择 Java 安装。 如果您是 windows 64 位操作系统,请选择 Windows ...
java 源码编辑器
记忆游戏一个简单、快速编码的 Java 内存游戏,使用 Swing。 Fox 图片来自谷歌搜索。 我使用 Blender 在 3D 中渲染了瓷砖翻转动画。
在java 程序中调用百度或谷歌搜索引擎搜索关键字并分析得到的网页代码。获得url 标题 摘要等。源代码
图像识别运行流程为安卓客户端调用图库或图像头权限->选择图片->图片上传到后端->后端使用命令行操作调用算法predict->后端得到预测结果->返回至前端(后续可使用TensorFlow Mobile 把深度学习模型转化为pb格式文件...
使用谷歌搜索搜索库包信息 安慰 (+ 点击放大) 使用 WebSocket 实时提供所有日志 与日志查看页面相同的日志查看功能 分析(聚合查询) (+ 点击放大) 通过自定义分组和过滤轻松聚合日志计数 批量报告 (+ 点击放大) ...
完整可运行的用jquery开发的ajax各种实例包括(级联菜单,谷歌式搜索提示,可编辑表格页面无刷新切换等)
谷歌搜索示例代码: webUser = new WebUser(GOOGLE); assertThat(webUser.getCurrentUrl(), is(GOOGLE)); on(googleSearchPage()).search("hello"); on(googleResultsPage()).getResults(results); ...
这是一个使用 Google Image Search API 搜索和显示图像的 Android 应用程序。 花费时间:总共花费6小时完成的用户故事: 用户可以输入一个搜索查询,该查询将显示来自 Google Image API 的图像结果网格。 用户可以...
对源码稍稍微做了些整理,以前网络曲库是搜索谷歌音乐服务器,现在谷歌服务已经停了,所以换了另外一个,由于时间关系,没怎么测试,有提问可以提给我,邮箱:jys1109@126.com,代码已经移至svn china上面,地址为:...
java中识别文字比较简单,使用的软件是tesseractocr(使用的版本是3.02,3以后的版本才支持中文),这个软件需要安装在本地电脑中,安装的过程中全部都按照默认进行安装(以便于Java直接调用),建议使用winRAR解压...
使用Google App Engine创建分布式存储系统的Web界面。 使用Java,Google Cloud Storage客户端库,Google Cloud Storage API和Blobstore API上载/下载,搜索,列出和删除文件。 该文件夹包含相关的源代码,报告,用户...
Android Bootcamp Week2项目-网格图像搜索使用Google API搜索来搜索图像 用户可以输入搜索查询,该查询将显示来自Google Image API的图像结果网格。 用户可以点击结果中的任何图像以全屏查看图像 图像结果显示在一个...