代理的使用

Posted roadlandscape

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代理的使用相关的知识,希望对你有一定的参考价值。

  有些网站不允许爬虫进行数据爬取,因为会加大服务器的压力。其中一种最有效的方式是通过 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();
    }
}

 

以上是关于代理的使用的主要内容,如果未能解决你的问题,请参考以下文章

Extjs使用商店代理api; CRUD

spring aop中this和target区别

ios block和delegate的区别

Yarn: 一个新的JavaScript模块管理器

JAVA之AOP

微信小程序代码片段