IP地址唯一标识了Internet上的计算机,而URL则标识了这些计算机上的资源。类 URL 代表一个统一资源定位符,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询。
为了方便程序员编程,JDK中提供了URL类,该类的全名是java.net.URL,有了这样一个类,就可以使用它的各种方法来对URL对象进行分割、合并等处理。
统一资源定位符由 4 部分组成:协议 、存放资源的主机域名、端口号和资源文件名。
https://www.baidu.com:80/index.html#aa?username=bjsxt&pwd=bjsxt
协议:http
域名:http://www.baidu.com
端口号:80
资源文件名:index.html
锚点:aa
参数:username=root&pwd=root
1、URl 类常用的方法
2、URL 类的使用
import java.net.MalformedURLException;
import java.net.URL;
public class TestURL {
public static void main(String[] args) throws MalformedURLException {
URL url = new URL("https://www.baidu.com:80/index.html#aa
?username=bjsxt&pwd=bjsxt");
System.out.println("协议:" + url.getProtocol());
System.out.println("主机名:" + url.getHost());
//如果没有设置端口号则返回-1
System.out.println("端口号:" + url.getPort());
System.out.println("getFile():" + url.getFile());
System.out.println("获取与此url关联的协议的默认端口:"
+ url.getDefaultPort());
System.out.println("路径:" + url.getPath());
System.out.println("参数部分:" + url.getQuery());
System.out.println("锚点:" + url.getRef());
URL u1 = new URL("http://www.abc.com/aa/");
URL u2 = new URL(u1, "2.html"); // 相对路径构建url对象
System.out.println(u2.toString());
}
}
运行结果:
3、最简单的网络爬虫
public class TestURL2 {
public static void main(String[] args) {
crawler();
}
/**
* 网络爬虫:
* 从网络上获取资源 www.baidu.com
* 储存到本地
*/
public static void crawler() {
BufferedReader br = null;
BufferedWriter bw = null;
try {
//(1)创建URL对象
URL url = new URL("https://www.baidu.com");
//(2)获取字节输入流
InputStream is = url.openStream();
//(3)缓冲流---将字节流转换为字符流进行包装
br = new BufferedReader(new InputStreamReader(is,
"utf-8"));
//(4)存储到本地
bw = new BufferedWriter(new OutputStreamWriter(new
FileOutputStream("baidu.html"), "utf-8"));
//(5)边读边写
String line = null;
/*
* 这样就可以将网络内容下载到本地机器。
* 然后进行数据分析,建立索引。这也是搜索引擎的第一步。
*/
while((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
bw.flush();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
//(6)关闭流
try {
if(bw != null)
bw.close();
if(br != null)
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
尚学堂百战程序员
百战程序员_IT6000集_影响6000万学习IT的中国人【官网】