有些网站不允许爬虫进行数据爬取,因为会加大服务器的压力。其中一种最有效的方式是通过 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(); } }
来源:https://www.cnblogs.com/roadlandscape/p/12563620.html