大家应该也知道百度搜索结果都会有一个百度快照,这是通过缓存服务器调用出来的页面信息,这样我们就可以通过百度快照快速的浏览网页信息,那么这个缓存服务器跟爬虫又有什么联系么?
我们来大致了解一下爬虫的基本原理(个人理解,有错误给予纠正)。首先搜索引擎是不会产生内容的,它的信息是通过爬虫把信息检索出来。爬虫通过域名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/网页的源代码
以上是解析网页源代码其中的一部分截图。。。
以上是网页下载下来的图片。。。抓取成功。。
这是一个相对简单的抓取。。有时间up主会继续改善继续学习。。谢谢大家。。
时间: 2024-10-20 09:18:10