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("没有搜索到结果");
- }
- }
- }
相关推荐
通过以上步骤,我们可以创建一个简单的Python程序,使用Selenium调用谷歌浏览器打开百度,并进行搜索操作。这个程序展示了Python与Selenium的结合在网页自动化中的应用,对于测试工程师、Web开发者以及需要自动化...
谷歌搜索结果 JAVA API 这个 Java 包可以使用抓取和解析 Google、Bing 和百度搜索结果。 随意 fork 这个存储库以添加更多后端。 该项目是 Java 7 中 SerpApi 的实现。此代码依赖 GSON 进行高效的 JSON 处理。 ...
本项目专注于使用JSP和Java来集成并实现谷歌地图的查询功能。下面将详细阐述这一技术实现的关键知识点。 1. **JSP基础**: - JSP生命周期:包括翻译、初始化、服务和销毁四个阶段,开发者主要在服务阶段编写业务...
本资源"百度、谷歌搜索引擎API.zip"提供了与这两个知名搜索引擎交互的接口,允许开发者直接调用API来实现搜索功能,为用户带来便捷的搜索体验。 首先,我们来看百度搜索引擎API。百度提供了Baidu Open API平台,...
《Java JDK API谷歌翻译版》是为Java程序员提供的一款便捷的中文参考工具,它将官方的JDK API文档翻译成了中文,便于国内开发者理解和查阅。这个压缩包包含了两个主要文件和一个使用说明文档,分别是“jdk api 1.8_...
2. **API密钥**:在调用Google Map API时,需要一个有效的API密钥,这通常会存储在配置文件或环境变量中,确保安全。 3. **位置标记**:Java代码可能包含方法来创建和管理`Marker`对象,这些对象表示地图上的特定点...
该项目是一个基于JAVA技术栈的搜索下拉框实现,旨在模仿谷歌搜索引擎的实时搜索建议功能。主要采用了Struts2作为MVC框架,Hibernate作为对象关系映射(ORM)工具,MySQL作为数据库存储,以及Ajax进行异步数据交互。...
本实例专注于使用Java语言调用Google Maps API,并将其集成到一个内嵌浏览器中,以实现地址到经纬度坐标的自动转换,并在地图上显示Marker。Marker的双击监听功能也已部分实现。以下是对这些知识点的详细解释: 1. ...
【JSP仿谷歌搜索连接数据库】是一个典型的Web开发项目,主要使用Java Server Pages(JSP)技术来构建一个类似于谷歌搜索引擎的功能。在这个项目中,核心知识点主要包括以下几个方面: 1. **JSP基础**:JSP是Java的...
本文将详细解析"完全仿谷歌搜索 显示信息条数"这一主题,涵盖智能提示、自动回传、谷歌搜索效果的实现、AJAX技术的应用,以及如何在搜索结果中显示数据总数。 首先,我们要理解智能提示(Auto-suggestion)是提高...
在模型构建完成后,我们使用OR-Tools的Java API来设置求解器参数,如设置搜索策略、设定最大运行时间和解决方案质量。然后,调用`solve()`方法来求解模型,得到最优的排班方案。 解算出最优排班后,我们可以获取每...
这个项目是基于Java语言实现的,因此,我们将深入探讨如何在Android应用中集成谷歌地图API,使用Java编程语言进行地图功能的开发。 首先,我们需要了解谷歌地图API。谷歌地图API是谷歌提供的一套允许开发者在其应用...
- **类型注解**:增强了注解的使用,允许在类型使用位置(如方法签名)上使用注解。 - **集合工厂方法**:集合接口如`List`, `Set`和`Map`增加了便利的工厂方法,如`of()`和`copyOf()`。 3. **文档格式**: - **...
2. **maps_m2.jar**:这是Java应用程序的主代码文件,包含了谷歌地图V2.3.2的全部功能实现,通过jad文件进行调用和执行。 3. **2.jpg & 1.jpg**:可能为应用的截图或者图标,用于展示应用的界面或视觉标识。 4. **...
源代码通常会包含一个初始化地图的函数,调用`google.maps.Map`构造函数来创建地图实例。 2. **地理编码**:地理编码是将地址转换为经纬度坐标的过程。谷歌地图API提供了`Geocoder`对象,可以用于将街道地址转化...
3. **地图API集成**:地图功能是城市地图APP的核心,通常会使用第三方地图服务提供商的API,如高德、百度或谷歌地图API。开发者需要理解如何获取API密钥,以及如何调用地图服务,实现定位、导航、路线规划等功能。 ...
"用AJAX实现类似GOOGLE搜索框的功能"这个标题表明我们要讨论的是如何使用Asynchronous JavaScript and XML(AJAX)技术来创建一个功能类似于谷歌搜索框的交互式用户界面。谷歌搜索框的特点在于它能实时提供搜索建议...
然后是"自动调用搜索引擎搜索",这可能是应用内部集成的一种功能,允许用户直接在应用内输入查询关键词,通过API接口与搜索引擎如百度、谷歌等进行交互,获取搜索结果,并在应用内部展示。这种功能可以极大地提高...
JAVA分页是个经典问题,本人从网上搜集资料,并通过编程,较为完美地决地了这个问题,浏览、增加、删除、修改、查看、搜索都可以回到原来的页码,源码已经上传CSDN,值得下载! 我的方案是用两个TAG完成分页显示数据...
综上所述,通过Trie树数据结构和Java编程,我们可以构建一个高效的搜索提示系统,模拟谷歌和百度的搜索体验。这涉及到Trie树的插入和查找操作,以及与用户界面交互的逻辑处理。在实际开发中,我们还需要关注性能优化...