如何利用Java来调用百度搜索,更多细节请到github上查看search
自己没搜索引擎,又想要大规模的数据源,怎么办?可以对百度搜索善加利用,以小搏大,站在巨人的肩膀上。有很多的应用场景可以很巧妙地借助百度搜索来实现,比如网站的新闻采集,比如技术、品牌的新闻跟踪,比如知识库的收集,比如人机问答系统等,我之前做的一个准确率达百分之九十几的人机问答系统的数据源,其中一部分就是充分利用了百度搜索。我们可以很容易地扩展到其他的搜索引擎,使用JSoup+CSSPath技术,轻松获取页面的自定义的内容。
package org.apdplat.search; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class JSoupBaiduSearcher extends AbstractBaiduSearcher{ private static final Logger LOG = LoggerFactory.getLogger(JSoupBaiduSearcher.class); @Override public SearchResult search(String keyword) { return search(keyword, 1); } @Override public SearchResult search(String keyword, int page) { int pageSize = 10; //百度搜索结果每页大小为10,pn参数代表的不是页数,而是返回结果的开始数 //如获取第一页则pn=0,第二页则pn=10,第三页则pn=20,以此类推,抽象出模式:(page-1)*pageSize String url = "http://www.baidu.com/s?pn="+(page-1)*pageSize+"&wd="+keyword; SearchResult searchResult = new SearchResult(); searchResult.setPage(page); List<Webpage> webpages = new ArrayList<>(); try { Document document = Jsoup.connect(url).get(); //获取搜索结果数目 int total = getBaiduSearchResultCount(document); searchResult.setTotal(total); int len = 10; if (total < 1) { return null; } //如果搜索到的结果不足一页 if (total < 10) { len = total; } for (int i = 0; i < len; i++) { String titleCssQuery = "html body div div div div#content_left div#" + (i + 1 + (page-1)*pageSize) + ".result.c-container h3.t a"; String summaryCssQuery = "html body div div div div#content_left div#" + (i + 1 + (page-1)*pageSize) + ".result.c-container div.c-abstract"; LOG.debug("titleCssQuery:" + titleCssQuery); LOG.debug("summaryCssQuery:" + summaryCssQuery); Element titleElement = document.select(titleCssQuery).first(); String href = ""; String titleText = ""; if(titleElement != null){ titleText = titleElement.text(); href = titleElement.attr("href"); }else{ //处理百度百科 titleCssQuery = "html body div#out div#in div#wrapper div#container div#content_left div#1.result-op h3.t a"; summaryCssQuery = "html body div#out div#in div#wrapper div#container div#content_left div#1.result-op div p"; LOG.debug("处理百度百科 titleCssQuery:" + titleCssQuery); LOG.debug("处理百度百科 summaryCssQuery:" + summaryCssQuery); titleElement = document.select(titleCssQuery).first(); if(titleElement != null){ titleText = titleElement.text(); href = titleElement.attr("href"); } } LOG.debug(titleText); Element summaryElement = document.select(summaryCssQuery).first(); //处理百度知道 if(summaryElement == null){ summaryCssQuery = summaryCssQuery.replace("div.c-abstract","font"); LOG.debug("处理百度知道 summaryCssQuery:" + summaryCssQuery); summaryElement = document.select(summaryCssQuery).first(); } String summaryText = ""; if(summaryElement != null){ summaryText = summaryElement.text(); } LOG.debug(summaryText); if (titleText != null && !"".equals(titleText.trim()) && summaryText != null && !"".equals(summaryText.trim())) { Webpage webpage = new Webpage(); webpage.setTitle(titleText); webpage.setUrl(href); webpage.setSummary(summaryText); if (href != null) { String content = Tools.getHTMLContent(href); webpage.setContent(content); } else { LOG.info("页面正确提取失败"); } webpages.add(webpage); } else { LOG.error("获取搜索结果列表项出错:" + titleText + " - " + summaryText); } } } catch (IOException ex) { LOG.error("搜索出错",ex); } searchResult.setWebpages(webpages);; return searchResult; } /** * 获取百度搜索结果数 * 获取如下文本并解析数字: * 百度为您找到相关结果约13,200个 * @param document 文档 * @return 结果数 */ private int getBaiduSearchResultCount(Document document){ String cssQuery = "html body div div div div.nums"; LOG.debug("total cssQuery: " + cssQuery); Element totalElement = document.select(cssQuery).first(); String totalText = totalElement.text(); LOG.info("搜索结果文本:" + totalText); String regEx="[^0-9]"; Pattern pattern = Pattern.compile(regEx); Matcher matcher = pattern.matcher(totalText); totalText = matcher.replaceAll(""); int total = Integer.parseInt(totalText); LOG.info("搜索结果数:" + total); return total; } public static void main(String[] args) { Searcher searcher = new JSoupBaiduSearcher(); SearchResult searchResult = searcher.search("杨尚川",1); List<Webpage> webpages = searchResult.getWebpages(); if (webpages != null) { int i = 1; LOG.info("搜索结果 当前第 " + searchResult.getPage() + " 页,页面大小为:" + searchResult.getPageSize() + " 共有结果数:" + searchResult.getTotal()); 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("没有搜索到结果"); } } }
相关推荐
百度搜索接口
使用前,导入lib文件夹下的包,点击运行就可以了。而且可以利用此程序设计SO-PMI算法的实现。获得百度搜索数的同时得到两个词语的极性
JAVA___jQuery+AJAX_仿百度搜索功能,java版
本人原创测试了百度,搜狗,360搜索都可以获取重定向后的真实地址,直接运行就可以,也可以根据自己项目具体修改功能。java使用HttpURLConnection获取百度搜狗360搜索链接重定向真实目标链接地址url。
Java EE调用百度API,进行人脸注册,注册后可以登陆,会调用百度API人脸搜索,搜索成功即可登陆,填写自己申请的百度API密钥即可使用
利用元搜索下在百度 doc 文件。示例 利用httpclient 模拟像百度发请求
百度输入联想!使用jsonp调用百度的js实现搜索关键字的智能提示,拿来可以直接使用!
ajax使用,实现百度搜索范例,数据为模拟数据,主要实现使用ajax搜索查询
【Java毕业设计】代毕业设计,java调用百度地图API实现西安旅游景点搜索、路线规划导航
小弟用java写的一个桌面应用程序,可以读取百度新闻热搜词的前10条,呵呵,大家支持下啦
基于百度AI使用H5实现调用摄像头进行人脸注册、人脸搜索功能(Java) 前端使用trackingjs
实现信息检索功能 像百度的网页搜索框 搜索相关资源并可以选择并显示搜索结果 使用JTable作为搜索结果显示框 在网上找不到相关的资源 自已写了一个 这只是提供一个思路 如果有更好的想法 可以联系我 蛋疼的 Java***...
非常详细的程序,可以用来干很多事情。里面的程序可以直接在Eclpise上运行,不用加其他的jar包。
基于百度AI使用H5实现调用摄像头进行人脸注册、人脸搜索功能(Java),前端使用trackingjs
Java多线程大量调用百度地图的搜索功能,来做课程作业数据准备 读取xls 采用了apache.poi,说实话,使用体验上来说肯定没有python的pandas还用, 多线程共享资源 主要共享的就是一个sheet对象和访问列标row_number...
实现百度地图动态搜索、静态地图动态插入 mygw@163.com js 内容如下: /** 加载地图的主控类 */ var MapControl={ staticWith : 512,//链接静态图宽度 staticHeight : 320,//链接静态图的高度 ...
Java EE调用百度API,进行人脸注册,注册后可以登陆,会调用百度API人脸搜索,搜索成功即可登陆,
inurl是你所要搜索的网址中本身带有的关键字,因为很多网址本身会带有特定的信息,比如软件发布的网页网址信息中多含有 publish、submit、tuijian这样的信息,...本文采用Java语言写成,以google和百度搜索引擎为对象。
1.2背景 随着信息检索技术的高速发展,做为信息检索代表的搜索引擎被广泛引用,如google, 百度等,在中国Internet高速发展过程中,越来越受关注,特别是google,百度在美国 上市后,搜索引擎备受关注。 a.系统的...
本程序使用java编程,运行需要java环境或者下载jre包,放在文件夹同一目录运行。批量查询百度可导致百度验证码屏蔽,可以通过代理中国查找代理服务器设置查询