代理的使用

谁都会走 提交于 2020-03-25 02:51:20

  有些网站不允许爬虫进行数据爬取,因为会加大服务器的压力。其中一种最有效的方式是通过 ip+时间进行鉴别,因为正常人不可能短时间开启太多的页面,发起太多的请求。
  我们使用的WebMagic可以很方便的设置爬取数据的时间。但是这样会大大降低我们爬取数据的效率,如果不小心 ip 被禁了,会让我们无法爬去数据,那么我们就有必要使用代理服务器来爬取数据。
代理服务器:

  代理(英语:Proxy),也称网络代理,是一种特殊的网络服务,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。
  提供代理服务的电脑系统或其它类型的网络终端称为代理服务器(英文:ProxyServer)。一个完整的代理请求过程为:客户端首先与代理服务器创建连接,接着根据代理服务器所使用的代理协议,请求对目标服务器创建连接、或者获得目标服务器的指定资源。
    

  网上有很多代理服务器的提供商,但是大多是免费的不好用,付费的还行。免费的比如有:

    米扑代理  https://proxy.mimvp.com/free.php
    西刺免费代理 IP  http://www.xicidaili.com/
使用代理:

  WebMagic 使用的代理 APIProxyProvider。因为相对于 Site 的“配置”,ProxyProvider 定位更多是一个“组件”,所以代理不再从 Site 设置,而是由HttpClientDownloader 设置。

 

 

    

  ProxyProvider 有一个默认实现:SimpleProxyProvider。它是一个基于简单Round-Robin 的、没有失败检查的 ProxyProvider。可以配置任意个候选代理,每次会按顺序挑选一个代理使用。它适合用在自己搭建的比较稳定的代理的场景。如果需要根据实际使用情况对代理服务器进行管理(例如校验是否可用,定期清理、添加代理服务器等),只需要自己实现 APIProxyProvider 即可。

public class ProxyTest implements PageProcessor {

    @Override
    public void process(Page page) {
        page.putField("test", page.getHtml().all());
    }

    @Override
    public Site getSite() {
        return Site.me().setTimeOut(20000);
    }

    public static void main(String[] args) {
        HttpClientDownloader httpClientDownloader = new HttpClientDownloader();
        httpClientDownloader.setProxyProvider(SimpleProxyProvider.from(new Proxy("163.125.248.96", 8088)));
        Spider.create(new ProxyTest())
                .addUrl("https://2020.ip138.com/")
                .setDownloader(httpClientDownloader)
                .run();
    }
}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!