大家应该也知道百度搜索结果都会有一个百度快照,这是通过缓存服务器调用出来的页面信息,这样我们就可以通过百度快照快速的浏览网页信息,那么这个缓存服务器跟爬虫又有什么联系么?
我们来大致了解一下爬虫的基本原理(个人理解,有错误给予纠正)。首先搜索引擎是不会产生内容的,它的信息是通过爬虫把信息检索出来。爬虫通过域名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主会继续改善继续学习。。谢谢大家。。
本文出自 “忧伤的土豆饼” 博客,谢绝转载!