java爬移动端搜索引擎_尝试java开发搜索引擎爬虫
大家应该也知道百度搜索结果都会有一个百度快照,这是通过缓存服务器调用出来的页面信息,这样我们就可以通过百度快照快速的浏览网页信息,那么这个缓存服务器跟爬虫又有什么联系么?
我们来大致了解一下爬虫的基本原理(个人理解,有错误给予纠正)。首先搜索引擎是不会产生内容的,它的信息是通过爬虫把信息检索出来。爬虫通过域名URL获取到源代码,将页面内容存储到缓存服务器上同时建立索引。将下载下来的网页URL放进URL队列中,并记录避免重复抓取。然后在这个队列中检查URL,要是发现还没有被抓取就将这个URL放进待抓取队列中,在下次调度中下载这个URL相对应的网页。
首先我们需要一个jar包:jsoup-1.7.2.jar 这一个
package com.html;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
/**
*
* 利用java的Jsoup开发搜索引擎爬虫
* HtmlJsoup
* 创建人:youshangdetudoudou
* 时间:2014年9月9日-上午10:55:27
* @version 1.0.0
*
*/
public class HtmlJsoup {
/**
*
* 根据网址和页面的编码集获取网页的源代码
* 方法名:getHtmlResourceByURL
* 创建人:youshangdetudoudou
* 时间:2014年9月9日-上午11:01:22
* @param url 需要下载的url地址
* @param encoding 需要网页的编码集
* @return String 返回网页的源代码
* @exception
* @since 1.0.0
*/
public static String getHtmlResourceByURL(String url,String encoding){
//声明一个存储网页源代码的容器
StringBuffer buffer = new StringBuffer();
URL urlObj = null;
URLConnection uc = null;
InputStreamReader in = null;
BufferedReader reader = null;
//参数是网址。要try catch
try {
//建立网络连接
urlObj = new URL(url);
//打开网络连接
uc = urlObj.openConnection();
//建立网络的输入流
in = new InputStreamReader(uc.getInputStream(),encoding);
//缓冲写入的文件流
reader = new BufferedReader(in);
//临时变量
String tempLine = null;
//循环读取文件流
while((tempLine = reader.readLine())!=null){
buffer.append(tempLine+"\n");//循环不断的追加数据
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.err.println("connection timeout.....");
}finally{
if (in!=null) {
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return buffer.toString();
}
/**
*
* 通过图片地址批量下载图片到服务器的磁盘
* 方法名:downImages
* 创建人:youshangdetudoudou
* 时间:2014年9月9日-下午2:15:51
* @param imgURL
* @param filePath void
* @exception
* @since 1.0.0
*/
public static void downImages(String imgURL,String filePath){
String fileName = imgURL.substring(imgURL.lastIndexOf("/"));
//创建文件的目录
try {
File files = new File(filePath);
//判断是否存在文件夹
if(!files.exists()){
files.mkdir();
}
//获取图片文件的下载地址
URL url = new URL(imgURL);
//连接网络图片地址
HttpURLConnection uc = (HttpURLConnection)url.openConnection();
//获取连接的输出流
InputStream is = uc.getInputStream();
//创建文件
File file = new File(filePath+fileName);
//创建输出流,写入文件
FileOutputStream out = new FileOutputStream(file);
int i = 0;
while((i=is.read())!=-1){
out.write(i);
}
is.close();
out.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//java的入口函数
public static void main(String[] args){
System.out.println("haha");
//根据网址和网页的编码集 获取网页的源代码
String htmlResource = getHtmlResourceByURL("http://www.4399.com/","gbk");
//System.out.println(htmlResource);
//解析源代码
Document document = Jsoup.parse(htmlResource);
//获取网页的图片
Elements elements = document.getElementsByTag("img");
for(Element element : elements){
String imgSrc = element.attr("src");
String imgPath =imgSrc;
System.out.println("图片地址:"+imgSrc);
downImages(imgPath,"F:\\xfmovie\\images");
System.out.println("下载完成!!!!!!!!!");
}
//解析我们需要下载的内容部分
}
}
以上是获取http://www.4399.com/网页的源代码
以上是解析网页源代码其中的一部分截图。。。
以上是网页下载下来的图片。。。抓取成功。。
这是一个相对简单的抓取。。有时间up主会继续改善继续学习。。谢谢大家。。
本文出自 “忧伤的土豆饼” 博客,谢绝转载!
java爬移动端搜索引擎_尝试java开发搜索引擎爬虫相关推荐
- java cxf服务端代码_【JAVA】 cxf 生成 webservice 服务端代码
CXF Apache CXF = Celtix + XFire.CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding . ...
- java爬取网页数据_如何使用爬虫工具采集数据
网络爬虫是一种按照一定规则,自动抓取万维网数据的脚本.按照一定规则,指的是爬虫程序需要解析网页的dom结构,针对dom结构爬取自己感兴趣的数据. (图1) 这就是一个网页源码的dom结构,我们需要一级 ...
- java 取栈顶元素_《Java实战之内存模型》详解篇
内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行 JVM内存布局规定了Java在运行过程中内存申请.分配.管理的策略,保证了JVM的高效稳定运行 不同的JV ...
- java 堆大小的最大值_优化Java堆大小的5个技巧
优化Java堆大小的5个技巧 摘要:Java堆容量不足可以对性能造成很大影响,这样无疑就给程序带来不可必要的麻烦,本文总结了影响Java堆容量不足的五大原因以及巧妙地去优化? 本文作者Pierre是一 ...
- java 三个版本区别_关于java三个版本的区别
Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE.这三块相互补充,应用范围不同. * Java SE(Java Platform,Standard Edition).Java ...
- java 多态判断非空_收藏Java 面试题全梳理
脚本之家 你与百万开发者在一起 来源 | Java建设者(ID:javajianshe) 作者 |cxuan 如若转载请联系原公众号 Java 基础篇 Java 有哪些特点 并发性的:你可以在其中执行 ...
- java使用迭代器删除元素_使用Java从地图中删除元素
java使用迭代器删除元素 关于从Java中的Map删除元素的非常简短的文章. 我们将专注于删除多个元素,而忽略了您可以使用Map.remove删除单个元素的Map.remove . 以下Map将用于 ...
- java使用缓冲区读取文件_在Java中使用Google的协议缓冲区
java使用缓冲区读取文件 最近发布了 有效的Java第三版 ,我一直对确定此类Java开发书籍的更新感兴趣,该书籍的最新版本仅通过Java 6进行了介绍 . 在此版本中,显然存在与Java 7 , ...
- java se好用吗_利用 Java SE 7 更好地管理资源
2011 年 5 月发布 作者:Julien Ponge 本文介绍 Java 7 针对自动资源管理问题给出的解决办法,即 Coin 项目中提出的新语言结构 try-with-resources 语句. ...
最新文章
- React-Native android在windows下的踩坑记
- [SOJ] 简单哈希
- cpp 怎么连接mysql_C++连接mysql数据库的两种方法
- SAP OData服务的catalog service
- 具有外部Zookeeper集成并使用SOLRJ API访问数据的SOLR cloud 7.4集群配置
- *p++和*++p_2020年P气瓶充装新版试题及P气瓶充装找答案
- JavaScript 编程精解 中文第三版 翻译完成
- eslint配置及rule解释
- 易语言取MySQL错误代码,易语言中“取错误码”命令详解
- s40之演变v1~v3
- 前端中那些让你头疼的英文单词
- 4 基于pyecharts的python数据可视化——散点图和折线图的绘制
- 用Cython加密Python代码这么简单
- 厚积薄发 臻于至善,用友U9 cloud“王者归来”
- 计算机文档字体替换,在word中巧妙使用字体替换
- 查看linux服务器存储空间状况
- c语言将矩形分成多个小正方形,蓝桥杯练习算法题(矩形切割成正方形)
- 浏览器最小字体为12px以及解决方法
- war包放入tomcat中无法自动解压
- root大师电脑版 v1.7.6.6640 官网最新版