java爬虫IP代理免费获取

本文只简单介绍一下代理ip的获取和使用,并没有介绍java爬虫。

有空再单独开一个系列说爬虫吧。

一、代理ip简介

为了防止IP被网站封掉而不能继续爬取页面,爬虫程序需要不断的更换IP地址等信息,来伪装成一个真实用户。

代理IP的分类:

注:关于代理ip的分类信息来源于互联网。

关于代理IP的话 也分几种 透明代理、匿名代理、混淆代理、高匿代理

1、透明代理(Transparent Proxy)

REMOTE_ADDR = Proxy IP

HTTP_VIA = Proxy IP

HTTP_X_FORWARDED_FOR = Your IP

透明代理虽然可以直接“隐藏”你的IP地址,但是还是可以从HTTP_X_FORWARDED_FOR来查到你是谁。

2、匿名代理(Anonymous Proxy)

REMOTE_ADDR = proxy IP

HTTP_VIA = proxy IP

HTTP_X_FORWARDED_FOR = proxy IP

匿名代理比透明代理进步了一点:别人只能知道你用了代理,无法知道你是谁。

3、混淆代理(Distorting Proxies)

REMOTE_ADDR = Proxy IP

HTTP_VIA = Proxy IP

HTTP_X_FORWARDED_FOR = Random IP address

如上,与匿名代理相同,如果使用了混淆代理,别人还是能知道你在用代理,但是会得到一个假的IP地址,伪装的更逼真。

4、高匿代理(Elite proxy或High Anonymity Proxy)

REMOTE_ADDR = Proxy IP

HTTP_VIA = not determined

HTTP_X_FORWARDED_FOR = not determined

可以看出来,高匿代理让别人根本无法发现你是在用代理,所以是最好的选择。

二、获取代理ip

可以写一个小爬虫来爬取这些免费ip代理网站上的代理IP和端口号。

注意:可用率真的很低,需要再次筛选后才能使用。

分享几个免费IP代理网站:

1、西刺代理

2、66免费代理网

3、快代理

4、站大爷(不好用,端口号是图片,不易爬取。不过据说IP的质量还不错)

免费代理ip网站有很多,包括国内的和国外的,但是因为免费,所以可用率低到不行,因此获取之后再筛选是免不了的。

ip代理可以从各种网站上抓取,放到数据库中。

当一个ip地址被封时(检测response中的状态码),从数据库中取出一条新的ip使用。

同时数据库中的ip代理要定时检测是否可用,不可用的ip代理要及时删除。

判断ip代理是否可用:

使用该ip代理来访问一个网址,比如百度的首页,如果response中的状态码为200.说明可以正常访问,则该ip代理是可用的,否则是不可用的。

三、在java爬虫中使用代理ip

使用代理IP的完整实现代码:

package cn.mu16.DaiLi_IP; import java.io.IOException; import org.apache.http.HttpEntity; import org.apache.http.HttpHost; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; /* * Demo1 * 使用代理IP */ public class Demo1 { public static void main(String[] args) throws Exception{ CloseableHttpClient httpClient = HttpClients.createDefault(); // 创建一个HTTPClient对象 HttpGet httpget = new HttpGet("";); // 创建HTTP的get请求实例 //==========设置代理IP HttpHost proxy = new HttpHost("58.243.207.87",9858 ); //设置代理IP的地址和端口号 RequestConfig config =RequestConfig.custom().setProxy(proxy).build(); httpget.setConfig(config); //=================== // 设置请求头信息,模拟浏览器,这里使用火狐浏览器的User-Agent httpget.setHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:55.0) Gecko/ Firefox/55.0"); CloseableHttpResponse response = null; // 创建CloseableHttpResponse对象 response = httpClient.execute(httpget); HttpEntity entity = response.getEntity(); // 获取返回实体(即返回的网页源码) System.out.println(EntityUtils.toString(entity, "utf-8")); //输出网页源码 closeAll(response, httpClient); //释放资源 } // 关闭所有资源 public static void closeAll(CloseableHttpResponse response, CloseableHttpClient httpClient) { // 关闭资源 try { response.close(); // 关闭response } catch (IOException e) { // IO异常 e.printStackTrace(); } try { httpClient.close(); // 关闭httpClient } catch (IOException e) { // IO异常 e.printStackTrace(); } } }

———————END——————