java爬虫常用设置代理IP教程

爬虫必须用代理IP吗?很多用户认为爬虫必须要用代理IP,没有代理IP将寸步难行;也有人说,代理IP是非必须的。那么他们这样认为的理由都是什么呢?
有的用户他自己写爬虫程序,公司的任务一天要爬取几十万个页面,有时任务多的时候一天要上百万,爬着爬着IP就被封了,没有代理IP根本不行,他认为没有代理ip爬虫将寸步难行。
他们说很有道理,都用亲身体验来证明了自己的观点。爬虫程序从本质上来说也是个访问网页的用户而已,只不过是个不那么守规矩的特殊用户,服务器一般很不欢迎这样的特殊用户总是用各种手段发现和禁止。最常见的就是判断你访问的频率,因为普通人访问网页的频率是不会很快的,如果发现某个ip访问的过快就会将此ip封禁。
当任务量比较大的时候,一天采集上百万的数据,慢慢爬就完不成任务了,加速爬的话,目标服务器压力太大,就会封IP,同样完不成任务。那怎么办呢,只有用代理IP来解决了。在这里我就是使用了我们长期使用的一家质量好的代理,亿牛云代理,而且是使用的他们的爬虫代理(动态转发)和一般的api模式不一样。这种更简单更方便,对于懒人来说绝对是最佳选择。
具体代码的使用
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.Authenticator;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.PasswordAuthentication;
import java.net.Proxy;
import java.net.URL;
import java.util.Random;

    class ProxyAuthenticator extends Authenticator {
        private String user, password;

        public ProxyAuthenticator(String user, String password) {
            this.user     = user;
            this.password = password;
        }

        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(user, password.toCharArray());
        }
    }

    /**
     * 注意:下面代码仅仅实现HTTP请求链接,每一次请求都是无状态保留的,仅仅是这次请求是更换IP的,如果下次请求的IP地址会改变
     * 如果是多线程访问的话,只要将下面的代码嵌入到你自己的业务逻辑里面,那么每次都会用新的IP进行访问,如果担心IP有重复,
     * 自己可以维护IP的使用情况,并做校验。
     */
    public class Demo {
        public static void main(String args[]) throws Exception {
            // 要访问的目标页面
            String targetUrl = "http://httpbin.org/ip";

            // 代理服务器
            String proxyServer = "t.16yun.cn";
            int proxyPort      = 31111;

            // 代理隧道验证信息
            String proxyUser  = "username";
            String proxyPass  = "password";

            try {
                URL url = new URL(targetUrl);

                Authenticator.setDefault(new ProxyAuthenticator(proxyUser, proxyPass));

                // 创建代理服务器地址对象
                InetSocketAddress addr = new InetSocketAddress(proxyServer, proxyPort);
                // 创建HTTP类型代理对象
                Proxy proxy = new Proxy(Proxy.Type.HTTP, addr);

                // 设置通过代理访问目标页面
                HttpURLConnection connection= (HttpURLConnection) url.openConnection(proxy);
                // 设置Proxy-Tunnel
                // Random random = new Random();
                // int tunnel = random.nextInt(10000);
                //connection.setRequestProperty("Proxy-Tunnel",String.valueOf(tunnel));

                // 解析返回数据
                byte[] response = readStream(connection.getInputStream());

                System.out.println(new String(response));
            } catch (Exception e) {
                System.out.println(e.getLocalizedMessage());
            }
        }

        /**
         * 将输入流转换成字符串
         *
         * @param inStream
         * @return
         * @throws Exception
         */
        public static byte[] readStream(InputStream inStream) throws Exception {
            ByteArrayOutputStream outSteam =new ByteArrayOutputStream();
            byte[] buffer = new byte[1024];
            int len = -1;

            while ((len = inStream.read(buffer)) != -1) {
                outSteam.write(buffer, 0, len);
            }
            outSteam.close();
            inStream.close();

            return outSteam.toByteArray();
        }
    }

原文地址:https://blog.51cto.com/14400115/2416766

时间: 2024-10-27 22:01:32

java爬虫常用设置代理IP教程的相关文章

爬虫平台设置代理ip

首先从国外一个网站爬取了免费的代理ip信息存到mongodb中:接着代码设置: 在爬虫客户端抽象类中添加属性: 设置代理的代码其实就以下几句: firefoxProfile.setPreference("network.proxy.type", 1); firefoxProfile.setPreference("network.proxy.no_proxies_on", "localhost, 127.0.0.1"); //设置当没有代理ip时本

爬虫-设置代理ip

1.为什么要设置代理ip 在学习Python爬虫的时候,经常会遇见所要爬取的网站采取了反爬取技术导致爬取失败.高强度.高效率地爬取网页信息常常会给网站服务器带来巨大压力,所以同一个IP反复爬取同一个网页,就很可能被封,所以通过设置代理IP来避免被封,从而顺利爬取. 2.从那里获取免费的IP 西刺免费代理 快代理免费代理 from bs4 import BeautifulSoup import requests import random def get_ip_list(url, headers)

浏览器怎么设置代理IP?四种浏览器设置代理IP的方法

有时候上网需要更换IP,但是本地IP不需要更换,只是通过更换浏览器IP的方式来隐藏自己的IP,突破网络的限制,那么浏览器怎么设置代理IP?不同的浏览器设置代理IP的方法略有不同,下面黑洞代理小编整理了四种浏览器设置代理IP的方法.1.IE浏览器IE浏览器无疑是最常用的浏览器,而像360浏览器.搜狗浏览器.QQ浏览器这样的浏览器都是基于IE内核开发的浏览器,设置代理IP的方法也大同小异.IE浏览器上选择"工具--Internet选项--连接--局域网设置".在"局域网设置&qu

CentOS 6.5、6.7 设置静态 ip 教程

CentOS 6.5.6.7 设置静态 ip 教程,可以ping通外网:www.baidu.com ①. 网络适配器(VMware Network Adapter) 选择NAT模式 ②. 设置静态 ip DEVICE=eth0 #描述网卡对应的设备别名 BOOTPROTO=static #设置网卡获得 ip 的方式,选项:static[静态指定].dhcp[协议].bootp[协议] HWADDR=00:0c:29:24:e2:1b IPV6INIT=no NM_CONTROLLED=no ON

网络爬虫一定用代理IP吗?不用代理IP加快速度会被封吗?

网络爬虫一定用代理IP吗?好多人认为网络爬虫必须要加代理IP,没了代理IP将无路可走:也有些人认为代理IP是非需要的.这是为什么呢?不能直接用采集工具吗? 有人说,我用的采集器,用于收集一些其他网站的文章,随后筛选适用的做好加工即可,从来就没有用过代理IP,每天采集量一万篇上下.这没有代理IP照爬不误,因此网络爬虫不一定要用代理IP的. 但也有人说,企业的日常任务1天要抓取几十万个网页,有时候任务多的时候1天要一百多万,爬着爬着IP就被封了,没有代理IP根本不成.没有代理ip,网络爬虫根被就是寸

python爬取准备四 定义Opener和设置代理IP

Handler和Opener Handler处理器和自定义Opener opener是urllib2.OpenerDirector的实例,我们之前一直在使用urlopen,它是一个特殊的opener(也就是我们构建好的). 但是urlopen()方法不支持代理.cookie等其他的HTTP/GTTPS高级功能.所有要支持这些功能: 1.使用相关的Handler处理器来创建特定功能的处理器对象: 2.然后通过urllib2.build_opener()方法使用这些处理器对象,创建自定义opener

【python爬虫】加密代理IP的使用与设置一套session请求头

1:代理ip请求,存于redis: # 请求ip代理连接,更新redis的代理ip def proxy_redis(): sr = redis.Redis(connection_pool=Pool) proxys_text = requests.get("你请求代理IP的地址").text #更新redis ret = sr.set('proxy_list',proxys_text) # 检测ip代理是否有用 有用返回True,无用返回False def check_proxy(pro

构建一个给爬虫使用的代理IP池

做网络爬虫时,一般对代理IP的需求量比较大.因为在爬取网站信息的过程中,很多网站做了反爬虫策略,可能会对每个IP做频次控制.这样我们在爬取网站时就需要很多代理IP. 代理IP的获取,可以从以下几个途径得到: 从免费的网站上获取,质量很低,能用的IP极少 购买收费的代理服务,质量高很多 自己搭建代理服务器,稳定,但需要大量的服务器资源. 本文的代理IP池是通过爬虫事先从多个免费网站上获取代理IP之后,再做检查判断IP是否可用,可用的话就存放到MongoDB中,最后展示到前端的页面上. 获取可用Pr

Ubuntu 16.04修改MAC地址以及网络常用设置(IP/DNS/网关)

1.先停止桌面版自带的NetworkManager,这东西很难用,且有些设置需要重启. sudo systemctl stop NetworkManager.service sudo systemctl disable NetworkManager.service 2.设置MAC地址在帮助文档中应该找这个关键字:hardware address,设置有两种方式,临时和永久. 临时,直接使用命令行方式,重启后失效 sudo ifconfig eth0 down sudo ifconfig eth0