java爬虫图片打不开_Java爬虫-爬取页面图片

本文介绍如何使用Java编写爬虫,从指定网页抓取并下载图片。通过Jsoup库解析HTML,获取图片URL,然后利用Java的网络编程功能下载图片到本地。
摘要由CSDN通过智能技术生成

摘要

从零开始学习爬虫,爬取一个简单网站页面的图片数据。

步骤

第一步:获取页面的源代码;

第二步:解析源代码,含有图片的标签,再找到图片标签里面的src;

第三步:利用Java里面的net包,网络编程

代码

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;

/**

* Java 爬取网页上的图片

*

* 第一步:获取页面的源代码;

* 第二步:解析源代码,含有图片的标签,再找到图片标签里面的src;

* 第三步:利用Java里面的net包,网络编程

*

* @author SJH

*/

public class HtmlJsoup extends Thread{

/**

* 根据网页和编码获取网页内容和源代码

* @param url

* @param encoding

*/

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 {

// 建立网络连接

urlObj = new URL(url);

// 打开网络连接

uc = urlObj.openConnection();

// 创建输入流

in = new InputStreamReader(uc.getInputStream(),encoding);

// 创建一个缓冲写入流

reader = new BufferedReader(in);

String line = null;

while ((line = reader.readLine()) != null) {

// 一行一行追加

buffer.append(line+"\r\n");

}

} catch (Exception e) {

e.printStackTrace();

} finally{

try {

if (in != null) {

in.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

return buffer.toString();

}

/**

* 根据图片的URL下载的图片到本地的filePath

* @param filePath 文件夹

* @param imageUrl 图片的网址

*/

public static void downImages(String filePath,String imageUrl){

// 截取图片的名称

String fileName = imageUrl.substring(imageUrl.lastIndexOf("/"));

//创建文件的目录结构

File files = new File(filePath);

if(!files.exists()){// 判断文件夹是否存在,如果不存在就创建一个文件夹

files.mkdirs();

}

try {

URL url = new URL(imageUrl);

HttpURLConnection connection = (HttpURLConnection) url.openConnection();

InputStream is = connection.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();

}

}

//执行测试程序代码

public static void main(String[] args) {

//要爬取的网页地址

String url = "http://desk.zol.com.cn/fengjing/";

//编码方式

String encoding = "UTF-8";

//存储到本地的位置

String filePath = "D:\\work";

String htmlResource = getHtmlResourceByUrl(url, encoding);

// 解析网页源代码

Document document = Jsoup.parse(htmlResource);

// 获取所有图片的地址

Elements elements = document.getElementsByTag("img");

System.out.println("-------------------------开始下载!----------------------------");

for(Element element : elements){

String imgSrc = element.attr("src");

// 判断imgSrc是否为空且是否以"http://"或是"https://"开头

if (!"".equals(imgSrc) && (imgSrc.startsWith("http://") || imgSrc.startsWith("https://"))) {

System.out.println("正在下载的图片的地址:" + imgSrc);

downImages(filePath, imgSrc);

}

}

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

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值