尝试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<BR>
 * 创建人:youshangdetudoudou <BR>
 * 时间:2014年9月9日-上午10:55:27 <BR>
 * @version 1.0.0
 *
 */

public class HtmlJsoup {
	/**
	 * 
	 * 根据网址和页面的编码集获取网页的源代码<BR>
	 * 方法名:getHtmlResourceByURL<BR>
	 * 创建人:youshangdetudoudou <BR>
	 * 时间:2014年9月9日-上午11:01:22 <BR>
	 * @param url 需要下载的url地址
	 * @param encoding 需要网页的编码集
	 * @return String 返回网页的源代码<BR>
	 * @exception <BR>
	 * @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();
	}
	/**
	 * 
	 * 通过图片地址批量下载图片到服务器的磁盘<BR>
	 * 方法名:downImages<BR>
	 * 创建人:youshangdetudoudou <BR>
	 * 时间:2014年9月9日-下午2:15:51 <BR>
	 * @param imgURL
	 * @param filePath void<BR>
	 * @exception <BR>
	 * @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/网页的源代码

    wKiom1QOr-yBeFt_AAPmf6Dd_X0960.jpg

以上是解析网页源代码其中的一部分截图。。。

wKioL1QOsB_DOPUpAAT1PgdmW0s176.jpg

以上是网页下载下来的图片。。。抓取成功。。


这是一个相对简单的抓取。。有时间up主会继续改善继续学习。。谢谢大家。。

本文出自 “忧伤的土豆饼” 博客,谢绝转载!

你可能感兴趣的:(java,开发,搜索引擎,搜索结果)