在一般情况下,使用浏览器可以直接连接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); } }