java中 抓取网页一共有5种方式
通过jdk自带的方法 有两种方式可以抓取网页,
他们分别是。
httpurlConnection 抓取网页, nio发送http请求 抓取网页 , 由于封装的不够好,抓取网页时代码较复杂,所以不常用
Jsoup, httpClient, htmlunit
是目前较流行的,封装较完善的,可以用来抓取网页的 工具包.
此外还有htmlpaser等。 但是有点过时了。这里暂时只介绍这3种.
首先 先使用 jdk自带的 httpurlConnection 类 抓取网页
新建一个项目 Crawler
新建一个包 org.apache.crawlerType
新建一个类 urlConnection
编写如下代码
package org.apache.crawlerType;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class urlConnection {
public static void main(String[] args) {
HttpURLConnection conn = null;
try {
//构造一个连接
conn = (HttpURLConnection) (new URL("http://www.cnblogs.com/szw-blog/p/8565944.html")).openConnection();
conn.setConnectTimeout(3000); //设置建立连接的 超时时间 3秒。
conn.setReadTimeout(3000); //设置数据传输的超时时间 3秒。 注意两者的区分
//ConnectTimeout只有在网络正常的情况下才有效,而当网络不正常时,ReadTimeout才真正的起作用
//比如说。 用程序发起了一个url连接。 服务器正在传输数据给你。 突然断网了。
//如果不设置数据传输的超时时间。 则 该线程 会直接 阻塞住。 程序也不会往下执行 ,也不会报错
//设置请求头,设置当前的 浏览器 是火狐 (反爬的服务器会读取请求头里面的信息。 如果不设置浏览器请求头的话。许多网站都会不返回信息);
//除此之外,还有做 Cookie 校验的 等
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Linux; U; Android 6.0.1; zh-CN; MI 5 Build/MXB48T) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/11.8.8.968 Mobile Safari/537.36");
// 请求头详解 可以看 http://blog.csdn.net/alanlzz/article/details/72846718
//网络状态码 为200 则为成功访问。 常见的 还有 404 , 500等.
if(200 == conn.getResponseCode()){
InputStream is =conn.getInputStream(); //获取页面的io流
StringBuffer sb=new StringBuffer();
BufferedReader br = new BufferedReader(new InputStreamReader(is
,"UTF-8")); //以utf-8编码 解码
String line = null;
while ((line = br.readLine()) != null) {
sb.append(line+"\r\n");
}
System.out.println(sb.toString());
}
conn.disconnect(); //关闭该链接,相当于关闭当前页面, 养成随手关闭链接的良好的习惯很重要。
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
finally{
conn.disconnect(); //关闭该链接,相当于关闭当前页面, 养成随手关闭链接的良好的习惯很重要。
}
}
}
运行后的结果为
以上 是httpurlConnection 抓取网页 的简单方法
下一章 介绍 jsoup 访问网页的java 实现