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/网页的源代码

7c8e08754ee929c507a5a9970717d439.png

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

4fc6bc9532fad56a0ac728c21208ae9e.png

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值