思路
主要先是通过java实现http请求获取到我们需要下载图片的网址,然后根据图片的网址通过字节写入本地文件夹中
代码
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Getphoto {
private static ArrayList<String> urls = new ArrayList<String>();
//集合 存储
private static String url_end=null;
//最后匹配得到的图片url(需拼接)
private static int z=1;
//图片名字和计次
public static void httpget(String geturl) {
//构造httpget请求函数
try {
HttpURLConnection urlConnection = null;
URL url = new URL(geturl);
//url对象初始化
urlConnection = (HttpURLConnection)url.openConnection();
//建立连接
urlConnection.setConnectTimeout(5000);
//连接超时设置5s
urlConnection.setReadTimeout(5000);
//读取超时5s 获取响应
urlConnection.setUseCaches(false);
//不使用缓存
urlConnection.setRequestProperty("user-agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3706.400 SLBrowser/10.0.4040.400" );
//添加协议头 请求需要时可以添加其它
urlConnection.connect();
BufferedReader html =new BufferedReader(new InputStreamReader(urlConnection.getInputStream(),"GBK"));
//编码为gbk
String line = html.readLine();
//读取下一行内容
while(line!=null) {
//循环遍历每一遍的内容
Matcher matchingid = Pattern.compile("<a href=\"/tupian/(.*?).html").matcher(line);
//正则匹配id <a href=\"/tupian/(.*?).html为正则表达式 line为被匹配的数据
while(matchingid.find()) {
urls.add(matchingid.group(1));
//matchingid.group(1)为匹配的文本
}
Matcher matchingurl_end = Pattern.compile("<img src=\"(.*?)\" data-pic").matcher(line);
while(matchingurl_end.find()) {
url_end = matchingurl_end.group(1);
}
line = html.readLine();
}
}catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
private static void downloadPicture(String urlList,String path) {
//构造根据图片url下载图片函数
URL url = null;
try {
url = new URL(urlList);
//url对象初始化
DataInputStream dataInputStream = new DataInputStream(url.openStream());
//初始化数据输入流读数据 url.openStream()获取url资源的输入流
FileOutputStream fileOutputStream = new FileOutputStream(new File(path));
//初始化输出流写数据
ByteArrayOutputStream output = new ByteArrayOutputStream();
//初始化字节数组输出流,把数据写入到自己的数组中,数组的大小会随着数据的不断增加而自动增长
byte[] buffer = new byte[1024];
int length;
while ((length = dataInputStream.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
fileOutputStream.write(output.toByteArray());
dataInputStream.close();//关闭流
fileOutputStream.close();//关闭流
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String url = "";
int sore=11;
File file ;
for(int i=1;i<sore;i++) {
if(i==1) {
url = "http://pic.netbian.com/index.html";
}else if(i>1) {
url = "http://pic.netbian.com/index_"+i+".html";
}
httpget(url);
for(int j = 0;j<urls.size();j++) {
httpget("http://pic.netbian.com/tupian/"+urls.get(j)+".html");
file = new File("C:\\Users\\Lenovo\\Desktop\\images");
//创建文件夹对象
if (!file.exists()) {
//如果文件夹不存在 则创建一个空的文件夹
file.mkdirs();
}
downloadPicture("http://pic.netbian.com"+url_end, "C:\\Users\\Lenovo\\Desktop\\images\\"+z+".jpg");
z = z + 1;
if(j==20) {
urls.removeAll(urls);//清空集合
}
}
}
}
}
牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛