java实现简单爬虫功能_java 实现简单爬虫

该博客介绍了一种使用Java实现的简单图片爬虫,通过Jsoup解析HTML页面获取图片路径,并进行下载。首先获取页面内容,然后解析HTML获取图片源,接着下载图片并处理下一页链接,实现循环下载。
摘要由CSDN通过智能技术生成

java 实现简单爬虫,爬取图片。

根据爬取页面内容,使用jsoup解析html页面,获取需要的路径,进行循环下载。

效果:

a807c387160cd253f0bf80d858f8be56.png

4948feb7dad1dfcb7398d0aad90578b8.png

实现代码思路:

2、获取页面内容,定义方法getHtml(String url)

3、获取页面内容图片路径,定义方法getImgSrcListFromHtml(String html)

4、从页面内容中获取下一个页面路径,定义方法getNextPageUrl(String html)

5、下载图片,downloadImg(List list, String filepath),实现:通过获取的流转成byte[]数组,再通过FileOutputStream写出

6、InputStream流转换byte[]定义方法getBytesFromInputStream(InputStream inputStream),实现:ByteArrayOutputStream的toByteArray()方法转byte[];

全部代码:

package com.gx.reptile.util;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.net.HttpURLConnection;

import java.net.URL;

import java.util.ArrayList;

import java.util.List;

import org.jsoup.Jsoup;

import org.jsoup.nodes.Document;

import org.jsoup.select.Elements;

/**

*

* @ClassName: ReptileUtil

* @Description: 图片爬虫 -- 使用jsoup解析html页面,获取需要的路径,进行循环下载

* @author zhoujie

* @date 2018年7月27日 下午8:26:01

* @version V1.0

* 百度

*/

public class ReptileUtil {

//定义路径

static String baseurl = "http://www.netbian.com/";

static String geturl = "http://www.netbian.com/desk/18321.htm";

static String filepath = "C:\\Users\\zj\\Desktop\\new\\";

public static void main(String[] args) {

System.out.println("初始下载页面:"+geturl);

String html = getHtml(geturl); //html页面内容

List srclists = getImgSrcListFromHtml(html); //图片地址集合

downloadImg(srclists, filepath); //下载图片

//获取下一个页面进行下载

List list = getNextPageUrl(html);

System.out.println(list.size());

for (int i = 0; i < list.size(); i++) {

String url = list.get(i);

System.out.println("下一个下载页面:"+url);

String html2 = getHtml(url); //html页面内容

List srclists2 = getImgSrcListFromHtml(html2); //图片地址集合

downloadImg(srclists2, filepath); //下载图片

}

System.out.println("下载完毕");

}

/**

*

* @Title: getHtml

* @Description: 获取页面内容

* @param @param url

* @param @return 页面内容

* @return String 返回类型

* @throws

*/

public static String getHtml(String url){

String html = "";

try {

html = Jsoup.connect(url).execute().body();

} catch (IOException e) {

e.printStackTrace();

}

return html;

}

/**

*

* @Title: getImgSrcListFromHtml

* @Description: 获取页面内容图片路径

* @param @param html 页面内容

* @param @return 图片路径数组

* @return ArrayList 返回类型

* @throws

*/

public static List getImgSrcListFromHtml(String html){

List list = new ArrayList<>();

//解析成html页面

Document document = Jsoup.parse(html);

//获取目标

Elements elements = document.select("div [class=pic]").select("img");

int len = elements.size();

for (int i = 0; i < len; i++) {

list.add(elements.get(i).attr("src"));

}

return list;

}

/**

*

* @Title: getNextPage

* @Description: 从页面内容中获取下一个页面路径

* @param 页面内容

* @return List 返回页面url数组

* @throws

*/

public static List getNextPageUrl(String html){

List list = new ArrayList<>();

//解析成html页面

Document document = Jsoup.parse(html);

//获取目标

Elements elements = document.select("div [class=list]").select("a");

for (int i = 0;i

String url = baseurl + elements.get(i).attr("href");

list.add(url);

}

return list;

}

/**

*

* @Title: downloadImg

* @Description: 下载图片 -- 通过获取的流转成byte[]数组,再通过FileOutputStream写出

* @param @param list 图片路径数组

* @param @param filepath 保存文件夹位置

* @return void 返回类型

* @throws

*/

public static void downloadImg(List list, String filepath){

URL newUrl = null;

HttpURLConnection hconnection = null;

InputStream inputStream = null;

FileOutputStream fileOutputStream = null;

byte[] bs = null;

try {

int len = list.size();

for (int i = 0; i < len; i++) {

newUrl = new URL(list.get(i));

hconnection = (HttpURLConnection) newUrl.openConnection(); //打开连接

inputStream = hconnection.getInputStream(); //获取流

bs = getBytesFromInputStream(inputStream); //流转btye[]

filepath = filepath + list.get(i).substring(list.get(i).lastIndexOf("/")+1); //获取图片名称

System.out.println("生成图片路径:"+filepath);

fileOutputStream = new FileOutputStream(new File(filepath));

fileOutputStream.write(bs); //写出

}

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

inputStream.close();

fileOutputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

/**

*

* @Title: getBytesFromInputStream

* @Description: InputStream流转换byte[]

* @param @param inputStream

* @param @return byte[]

* @return byte[] 返回类型

* @throws

*/

public static byte[] getBytesFromInputStream(InputStream inputStream){

byte[] bs = null;

try {

byte[] buffer = new byte[1024];

int len = 0;

ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream(); //

while((len = inputStream.read(buffer)) != -1){

arrayOutputStream.write(buffer, 0 ,len);

}

bs = arrayOutputStream.toByteArray();

} catch (IOException e) {

e.printStackTrace();

}

return bs;

}

}

ok。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值