先从一个简单的例子看起。
获取百度“http://www.baidu.com”网页源码
package cn.com.spider;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class Spider {
public static void main(String[] args) {
String url = "http://www.baidu.com";
String result = "";
BufferedReader in = null;
try {
URL realUrl = new URL(url);
URLConnection con = realUrl.openConnection();
con.connect();
in = new BufferedReader(new InputStreamReader(con.getInputStream(),"utf-8"));
String line;
while((line=in.readLine())!=null){
String url = "http://www.baidu.com";
String result = "";
BufferedReader in = null;
try {
URL realUrl = new URL(url);
URLConnection con = realUrl.openConnection();
con.connect();
in = new BufferedReader(new InputStreamReader(con.getInputStream(),"utf-8"));
String line;
while((line=in.readLine())!=null){
result+=line;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
if(in!=null){
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
System.out.println(result);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
if(in!=null){
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
System.out.println(result);
}
}
——————————————————————————————————————————————————————————————————
1.用到了net包
2.关键步骤:初始化一个连接,从该连接中获得输入流,从流中取得数据,注意编码格式要与网页源码格式一致,网页的编码格式可以在起源码中的“charset”的值获取。
步骤很简单,我们来研究下这个连接connection里有什么。
URLConnection 是根据各种协议交给不同的协议处理实现子类去处理的,这是典型的多态。
http:// 的 HTTP 协议交给 java.net.HttpURLConnection 的子类 sun.net.www.protocol.http.HttpURLConnection 处理
ftp:// 的 FTP 协议交给 URLConnection 的子类 sun.net.www.protocol.ftp.FtpURLConnection 处理
file:// 的 FILE 协议交给 URLConnection 的子类 sun.net.www.protocol.file.FileURLConnection 处理
https:// 的 HTTPS 协议交给 javax.net.ssl.HttpsURLConnection 的子类 sun.net.www.protocol.https.HttpsURLConnectionImpl 处理
jar:// 的交给 java.net.JarURLConnection 子类 sun.net.www.protocol.jar.JarURLConnection 处理
mailto:// 的交给 URLConnection 的子类 sun.net.www.protocol.mailto.MailToURLConnection 处理
http:// 的 HTTP 协议交给 java.net.HttpURLConnection 的子类 sun.net.www.protocol.http.HttpURLConnection 处理
ftp:// 的 FTP 协议交给 URLConnection 的子类 sun.net.www.protocol.ftp.FtpURLConnection 处理
file:// 的 FILE 协议交给 URLConnection 的子类 sun.net.www.protocol.file.FileURLConnection 处理
https:// 的 HTTPS 协议交给 javax.net.ssl.HttpsURLConnection 的子类 sun.net.www.protocol.https.HttpsURLConnectionImpl 处理
jar:// 的交给 java.net.JarURLConnection 子类 sun.net.www.protocol.jar.JarURLConnection 处理
mailto:// 的交给 URLConnection 的子类 sun.net.www.protocol.mailto.MailToURLConnection 处理
URLConnection是一个抽象类,根据网址类型返回不同的协议处理子类。