package com.peidon.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.URL;
import java.net.URLConnection; import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements; /**
* @author sunshine
* @version 1.0
* @date:2015年8月15日 上午9:01:13
* @description: Java开发搜索引擎爬虫
* jsoup 类似jQuery的强大功能,什么方便解析操作HTML DOM 树
* 关联jar包 jsoup-1.8.3.jar
*/
public class HttpSoup { public static void main(String[] args) { //根据网址和页面的编码集 获取网页的源代码
String htmlResource = getHtmlResourceByUrl("http://www.ui.cn/", "UTF-8");
//System.out.println(htmlResource); //解析源代码
Document document = Jsoup.parse(htmlResource); //获取网页的图片
//网页图片标签<img src="" alt="" width="" height="" />
Elements elements = document.getElementsByTag("img"); for(Element element : elements){
String imgSrc = element.attr("src");
//System.out.println(imgSrc);
downImages(imgSrc,"D:\\test\\images\\");
System.out.println("下载成功:"+imgSrc);
//System.out.println(imgSrc.substring(imgSrc.lastIndexOf("/")));
}
} /**
* 根据一个图片的URL地址,通过这个URL批量下载图片到服务器的磁盘
* @param imageUrl 要下载的服务器地址
* @param filePath 下载完成后保存到服务器的图片地址
*
*/
public static void downImages(String imageUrl, String filePath){
String fileName = imageUrl.substring(imageUrl.lastIndexOf("/")); try {
//创建文件的目录
File files = new File(filePath);
//判断文件是否存在
if(!files.exists()){
files.mkdirs();
}
//获取图片文件的下载地址
URL url = new URL(imageUrl);
//连接网络图片地址
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) {
e.printStackTrace();
}
} /**
* 根据网址和页面的编码集 获取网页的源代码
* @param url
* @param encoding
* @return
*/
public static String getHtmlResourceByUrl(String url, String encoding){ //声明一个存储网页源代码的容器
StringBuffer buff = new StringBuffer(); URL urlObj = null;
URLConnection uc = null;
InputStreamReader in = null;
BufferedReader reader = null;
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){
buff.append(tempLine + "\n"); //循环追加数据
} } catch (Exception e) { e.printStackTrace();
System.out.println("Conection timeout ...");
} finally {
if(in != null){
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
} } return buff.toString();
}
}

Java开发搜索引擎爬虫的更多相关文章

  1. Java开发、网络爬虫、自然语言处理、数据挖掘简介

    一.java开发 (1) 应用开发,即Java SE开发,不属于java的优势所在,所以市场占有率很低,前途也不被看好. (2) web开发,即Java Web开发,主要是基于自有或第三方成熟框架的系 ...

  2. java开发爬虫Deno

    java开发爬虫Deno 身为一个程序员不会两三手爬虫怎么能在行业里立足啊,这是开发中自己写的一个java爬虫的Demo,供大家参考. java爬虫的开发依赖于jsoup.jar 直接上代码 publ ...

  3. Python分布式爬虫开发搜索引擎 Scrapy实战视频教程

    点击了解更多Python课程>>> Python分布式爬虫开发搜索引擎 Scrapy实战视频教程 课程目录 |--第01集 教程推介 98.23MB |--第02集 windows下 ...

  4. 9个基于Java的搜索引擎框架

    在这个信息相当繁杂的互联网时代,我们已经学会了如何利用搜索引擎这个强大的利器来找寻目标信息,比如你会在Google上搜索情人节如何讨女朋友欢心,你也会在百度上寻找正规的整容医疗机构(尽管有很大一部分广 ...

  5. 阿里巴巴Java开发规范手册

      Java开发手册 版本号 制定团队 更新日期 备  注 1.0.0 阿里巴巴集团技术部 2016.12.7 首次向Java业界公开 一.编程规约 (一) 命名规约 1.   [强制]所有编程相关命 ...

  6. 9个基于Java的搜索引擎

    1.Java 全文搜索引擎框架 Lucene 毫无疑问,Lucene是目前最受欢迎的Java全文搜索框架,准确地说,它是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎.Luc ...

  7. 阿里巴巴 JAVA 开发手册

    阿里巴巴 JAVA 开发手册 1.0.0 阿里巴巴集团技术部 2016.12.7 首次向 Java 业界公开 一. 编程规约(一) 命名规约1. [强制]所有编程相关命名均不能以下划线或美元符号开始, ...

  8. [转]9个基于Java的搜索引擎框架

    9个基于Java的搜索引擎框架 在这个信息相当繁杂的互联网时代,我们已经学会了如何利用搜索引擎这个强大的利器来找寻目标信息,比如你会在Google上搜索情人节如何讨女朋友欢心,你也会在百度上寻找正规的 ...

  9. 【Java】Jsoup爬虫,一个简单获取京东商品信息的小Demo

    简单记录 - Jsoup爬虫入门实战 数据问题?数据库获取,消息队列中获取中,都可以成为数据源,爬虫! 爬取数据:(获取请求返回的页面信息,筛选出我们想要的数据就可以了!) 我们经常需要分析HTML网 ...

随机推荐

  1. select 框option添加属性 js计算价格 保持两位小数

    <select name="" id=""> <volist name="v['childList']" id=" ...

  2. [转载]void及void*的深度剖析

    void的含义 void即"无类型",void *则为"无类型指针",可以指向任何数据类型. void指针使用规范 ①void指针可以指向任意类型的数据,亦即可 ...

  3. RecyclerView 介绍 01

    RecyclerView是Android support v7里面是一个自定义控件.用来显示大量数据集合.类似ListView和GridView这两个控件,RecyclerView同样可以实现,甚至更 ...

  4. java.lang.instrument使用

    Java在1.5引入java.lang.instrument,你可以由此实现一个Javaagent,通过此agent来修改类的字节码即改变一个类. 程序启动之时启动代理(pre-main) 通过jav ...

  5. jquery尺寸:宽度与高度

    width() 方法设置或返回元素的宽度(不包括内边距.边框或外边距). height() 方法设置或返回元素的高度(不包括内边距.边框或外边距). innerWidth() 方法返回元素的宽度(包括 ...

  6. Bestcoder round #65 && hdu 5593 ZYB's Tree 树形dp

    Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submissio ...

  7. 简单的css 菜单

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. #asp.net core mvc 的视图注入

    View injection is the most useful feature introduced in ASP.NET Core. 1.添加一个FruitsService public cla ...

  9. HDU5727 Necklace(枚举 + 二分图最大匹配)

    题目大概说有n个yang珠子n个yin珠子,要交替串成一个环形项链,有些yang珠子和某个yin珠子相邻这个yang珠子会不高兴,问最少有几个yang珠子不高兴. 自然会想到直接用状压DP去解,转移很 ...

  10. Java视频

    http://wenku.baidu.com/course/list/512?tagID=143