在一般情况下,使用浏览器可以直接连接Internet站点获取网络信息,而代理服务器(Proxy Server)是网络上提供转接功能的服务器。代理服务器是介于客户端和Web服务器之间的一台服务器,基于代理服务器,浏览器不再直接从Web服务器获取数据,而是向代理服务器发送请求,信号会先发送到代理服务器,由代理服务器取回浏览器所需要的信息。可以将代理简单理解为中介。
在网络爬虫中,使用代理服务器访问网页内容,能够高度隐藏爬虫的真实IP地址,从而防止网络爬虫被服务器封锁。另外,普通网络爬虫使用固定的IP地址请求时,往往需要随机设置休息时间,而代理服务器却不需要,从而提高了采集的效率。目前,代理服务器可以来源于提供免费代理服务的一些网站,但这些免费代理IP地址的稳定性较差。另外,也可以通过付费的方式获取商业级代理,其提供的代理IP地址可用率较高,稳定性较强。
在Jsoup中,提供了两种方式设置代理服务器,如程序3-10和3-11所示。在设置代理服务器时,需要知道代理服务器的IP地址以及端口。在本案例中,只使用一个代理服务器请求网页,代理服务器的IP地址为“171.221.239.11”,端口为808。在实际应用中,往往需要构建代理池,不断地切换代理服务器去请求URL库。
//程序3-10
public class JsoupConnectProxy {
public static void main(String[] args) throws IOException {
//第一种方式设置代理
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("171.221.239.11", 808));
Connection connection = Jsoup.connect("https://www.baidu.com/").proxy(proxy);
Connection.Response response = connection.method(Connection.Method.GET).execute();
//获取响应状态码
int statusCode = response.statusCode();
System.out.println("响应状态码为:" + statusCode);
}
}
//程序3-11
public class JsoupConnectProxy {
public static void main(String[] args) throws IOException {
//第二种方式设置代理
Connection connection = Jsoup.connect("https://www.baidu.com/").proxy("171.221.239.11", 808);
Response response = connection.method(Method.GET).timeout(20*1000).execute();
//获取响应状态码
int statusCode = response.statusCode();
System.out.println("响应状态码为:" + statusCode);
}
}