目录

一、URL类

1. URL类基本概念

2. 构造器

3. 常用方法

二、爬虫实例

1. 爬取网络图片(简易)

2. 爬取网页源代码

3. 爬取网站所有图片


一、URL类

1. URL类基本概念

URL:Uniform Resource Locator 统一资源定位符

  1. 表示统一资源定位符,指向万维网上的“资源”的指针。用于区分、定位资源
  2. 一个标准的URL必须包括:protocol(方案或协议)、host(主机)、port(端口)、path(路径)、parameter(查询参数)、anchor(锚点)
  3. 通过URL我们可以访问Internet上的各种网络资源,比如最常见的WWW,FTP站点。浏览器通过解析给定的URL可以在网络上查找相应的文件或其他资源。
  4. 如 :http://www.goole.com:80/index.html , 分四部分组成:协议、存放资源的主句域名、端口号、资源文件名

2. 构造器

构造器

说明

URL(String spec)

从String表示形成一个UL对象

3. 常用方法

常用方法

说明

String getProtocol()

获取此URL的协议名称

String getHost()

获取此URL的主机名

Int getPort()

获取此URL的端口号

String getPath()

获取此URL的路径部分

String getFile()

获取此URL的文件名

String getQuery()

获取参数

String getRef()

获取锚点

二、爬虫实例

1. 爬取网络图片(简易)

第一步:也是最重要的一步!首先找到一张非常man的图片然后赋值图像路径

java从url中获取文件后缀 java通过url获取文件对象_.net

 第二步:编码

/** 通过URL对象完成简单的爬虫功能(保存网络图片) */
		try {// 创建URL对象 , 将网络资源路径传递到对象进行绑定
			URL url = new URL("https://pic3.zhimg.com/v2-41d65e3171d35d24f3fda527377ab2b6_r.jpg");
			// 通过ur1对象打来并且激活网络流来获取该图片资源
			// 同字节输入流(边读边写操作)
			InputStream is = url.openStream();
			// 创建爬虫后要写入的文件
			FileOutputStream fos = new FileOutputStream(new File("E:\\man.jpg"));
			int len = 0;
			while ((len = is.read()) != -1) {
				fos.write(len);
			}
			// 关团资源
			fos.close();
			is.close();
		} catch (Exception e) {
			e.printStackTrace();
		}

最后运行代码就可在指定爬到磁盘找到文件啦

java从url中获取文件后缀 java通过url获取文件对象_eclipse_02

2. 爬取网页源代码

第一步:先在指定磁盘新建一个txt文件用于保存爬下的资源

java从url中获取文件后缀 java通过url获取文件对象_eclipse_03

第二步:找到一个网站将网站路径赋值下来

java从url中获取文件后缀 java通过url获取文件对象_爬虫_04

第三步:编码

/** 通过URL对象完成简单的爬虫功能(保存网页源代码) */
		try {
			// 创建URL对象,将网络资源路径传递到该对象进行绑定
			URL url2 = new URL("");
			// 通过ur1对象打开并且激活网络流来获取网页资源
			InputStream openStream = url2.openStream();
			InputStreamReader read = new InputStreamReader(openStream, "UTF-8");
			BufferedReader br = new BufferedReader(read);
			// 创建爬虫后要写入的文件
			FileOutputStream fos = new FileOutputStream(new File("E:\\url.txt"));
			OutputStreamWriter osw = new OutputStreamWriter(fos);
			BufferedWriter bw = new BufferedWriter(osw);
			// 定文空变量来储存爬下来的内容
			String str = "";
			while ((str = br.readLine()) != null) {
				bw.write(str);
				bw.newLine();
				bw.flush();
			}
			// 关团资源
			bw.close();
			osw.close();
			fos.close();
			br.close();
			read.close();
			openStream.close();
		} catch (Exception e) {
			e.printStackTrace();
		}

最后运行代码找到之前新建的txt文件:

java从url中获取文件后缀 java通过url获取文件对象_爬虫_05

3. 爬取网站所有图片

        首先找个没有动态源代码的的网页就是不是通过js传值的,很难找,小编也是找了自己的博客网站进行爬取,现在大多数网站都有反爬虫技术😭,有兴趣的可以去自行扩展都是可刑的👍,这里只是一个案例供参考!

package com.net;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 
 * @author 云村小威
 *
 * @2023年7月21日 上午10:48:54
 */
public class Getphoto {
	public static void main(String[] args) throws Exception {
		// 定义URL对象,传入网络资源路径
		URL url = new URL("");
		// 通过url对象打开网络流来获取网络资源
		InputStream openStream = url.openStream();
		// 转换字符流并优化缓冲
		BufferedReader br = new BufferedReader(new InputStreamReader(openStream, "UTF-8"));
		// 每次读取一行,拼接到变量中
		StringBuffer sb = new StringBuffer(); // 保存源码信息
		String str = "";
		while ((str = br.readLine()) != null) {
			// 每次读取一行拼接到sb变量中
			sb.append(str + "\n");
		}
		// 关闭流
		br.close();
		openStream.close();

		/**
		 * 获取源码内容,进行正则处理 拿到源码所有img内容
		 */
		// 将源码信息转成字符串进行保存
		String count = sb.toString();
		// 定义正则表达式
		//<img src="" alt="">
		String zheng = "<img\\ssrc=\"https://([^>\"]+)\">";
		// 给正则表达式一个匹配模式
		Pattern compile = Pattern.compile(zheng);
		Matcher matcher = compile.matcher(count);
		// 循环所有正则规定的表达式路径
		while (matcher.find()) {
			// 1.构建URL
			URL imgUrl = new URL("http://" + matcher.group(1));
			/* 取到子字符串中的src分组中的值(图片地址) */
			String group = matcher.group(1);
			/* 取到图片的名字 */
			String fileName = group.substring(group.lastIndexOf("/"));
			// 2.打开网络流 并将字节转成缓冲字节流
			InputStream openStream2 = imgUrl.openStream();
			BufferedInputStream bis = new BufferedInputStream(openStream2);
			// 输出流 将图片写入到指定文件中
			BufferedOutputStream bos = new BufferedOutputStream(
					new FileOutputStream(new File("E:\\imgs" + fileName)));
			// 每次读取一个字节数组
			byte[] bytes = new byte[1024];
			int len = 0;
			while ((len = bis.read(bytes)) != -1) {
				// 写入到文件中
				bos.write(bytes);
				bos.flush();
			}
			// 关闭资源
			bos.close();
			bis.close();
			openStream2.close();
		}
	}

}

1. 通过代码打印count变量(这里就一个一个运行了,可参考代码这里的count是通过url爬取到的所有源代码)

java从url中获取文件后缀 java通过url获取文件对象_java从url中获取文件后缀_06

2. 找到img(图片标签), 找到它们的规律设置正则这里很重要!

最后运行代码,就可在指定爬取路径查看爬取到的图片了!

java从url中获取文件后缀 java通过url获取文件对象_爬虫_07