Jsoup抓取图片功能代码学习

       在整个过程中主要操作先获取图片地址,然后再下载到本地。

第一步,获取图片:

       在获取图片过程中使用Jsoup提供的select选择器,[src$=.jpg]指的是匹配以“.jpg”结尾的元素。

       Jsoup也提供了一些其他的匹配:

       [attr^=value]:利用匹配属性值开头查找元素。

       [attr$=value]:利用匹配属性值结尾查找元素。

    [attr*=value]: 利用匹配属性值包含属性值来查找元素。

    [attr~=regex]: 利用属性值匹配正则表达式来查找元素。

public static void parseUrl(String urlPath,String dir) throws IOException{
		
			Document doc = Jsoup.connect(urlPath).timeout(1000000).get();
			Elements es=doc.select("a[href]"); //带有href属性的a元素
			Elements pngs = doc.select("img[src$=.png]");  //扩展名为.png的图片
			Elements jpgs = doc.select("img[src$=.jpg]");  //扩展名为.jpg的图片
			Elements gifs = doc.select("img[src$=.gif]");  //扩展名为.gif的图片
			
			createDirectory(dir); //如果目录不存在,则创建目录
			downLoad(jpgs,dir);	
	}
      在获取图片资源之后需要将该资源进行下载保存,但是在这之前先要创建保存目录:
//创建目录
	public static void createDirectory(String dir){
		File directory=new File(dir);
		directory.mkdirs();
		//director.mkdir()方法只能创建一级目录,其父级目录必须存在,否则会有异常
		//使用mkdirs()方法可以创建多层级目录
	}

     然后需要对需要下载到本地图片资源进行创建:

     在该过程中主要给图片命名,以及添加后缀(具体后缀从资源地址获取)。

//提取图片
	public static void downLoad(Elements element,String dir){

		for(Element link:element){
			String imagesPath = link.attr("src");
			System.out.println(imagesPath);
			String[] arr=imagesPath.split("\\.");
			String suffix=arr[arr.length-1];
			try {
				getImages(imagesPath, dir+"0000"+ ++COUNT +"."+suffix);
			} catch (Exception e) {
				continue;
			}
		}
	}
      最后保存图片:

public static void getImages(String urlPath,String fileName) throws Exception{
		URL url=new URL(urlPath);
		//http协议连接对象
		HttpURLConnection con=(HttpURLConnection) url.openConnection();
		con.setRequestMethod("GET");
		con.setReadTimeout(6*10000);
		if(con.getResponseCode()<10000){
			InputStream inputStream=con.getInputStream();
			byte[] data=readStream(inputStream);
			if(data.length>(1024*10)){
				FileOutputStream outputStream=new FileOutputStream(fileName);
				outputStream.write(data);
				outputStream.close();
			}
		}
		
	}
	
	//读取url中数据,并以字节的形式返回
	public static byte[] readStream(InputStream inputStream) throws Exception{
		ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
		byte[] buffer=new byte[1024];
		int len=-1;
		while((len=inputStream.read(buffer))!=-1){
			outputStream.write(buffer,0,len);
		}
		outputStream.close();
		inputStream.close();
		
		return outputStream.toByteArray();
	}



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值