通过Java中的URL类进行简单的网络资源的爬取
一、先说一下URL类的构造方法可以通过两种路径,1)绝对经构建,2)相对路径构建。
我这里用绝对路径来进行构建:加入构造方法的字符串的各部分的含义直接用代码体现了。
package cn.skh.url01;
import java.net.MalformedURLException;
import java.net.URL;
public class TestUrl {
public static void main(String[] args) throws MalformedURLException {
//绝对路径构建
URL url=new URL("http://www.baidu.com:80/index.html#aa?uname=skh");
System.out.println("协议"+url.getProtocol());
System.out.println("域名"+url.getHost());
System.out.println("端口"+url.getPort());
System.out.println("资源"+url.getFile());
System.out.println("相对路径"+url.getPath());
System.out.println("锚点"+url.getRef());
System.out.println("参数"+url.getQuery());//?之后的为参数。如果存在锚点的话返回null,否则返回true;
}
}
输出:这需要注意的是如果存在锚点则不会有参数的存在,因为IDE会把他默认为锚点的一部分,在这里我添加了锚点,所以返回了一个null;
端口80
资源/index.html
相对路径/index.html
锚点aa?uname=skh
参数null
二、爬取资源:
在这里用了百度来测试:最好使用BufferedReader和BufferedWriter来进行读写,可以方便的转化编码格式;
package cn.skh.url01;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.MalformedURLException;
import java.net.URL;
/**
* 获取源代码
* @author SKH&L
*
*/
public class TestURL02 {
public static void main(String[] args) throws IOException {
URL url=new URL("http://www.baidu.com");//主页为默认资源,不写资源默认访问首页
//转化流;
BufferedReader br=new BufferedReader(new InputStreamReader(url.openStream(),"utf-8"));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("baidu.html"),"utf-8"));
String str=null;
while((str=br.readLine())!=null) {
// System.out.println(str);
bw.append(str);
bw.newLine();
}
bw.flush();
bw.close();
br.close();
}
}
还没有评论,来说两句吧...