http://passover.blog.51cto.com/2431658/502232
来源:互联网 发布:ac尼尔森数据 滑板 编辑:程序博客网 时间:2024/04/29 13:28
转载自:点击打开链接
所有写搜索的朋友估计都有过和我一样的烦恼,那就是如果不断的对某一个网站进行爬行,很容易被封IP。最笨的版本就是减少爬行频率,但是在很多场景下对爬行效率是有要求的,那么最直接的办法就是不断切换实际访问的IP,来达到访问流量分散的效果。当然也有很多朋友在用一个比较贱的办法,就是用ADSL拨号方式爬行,一旦被封掉就重新拨号换个IP,这个也算一个非常取巧的手段了。
本文重点介绍代理IP自动切换的方式,其实这个如果只是要实现,那是再简单不过了。一个爬虫在启动的时候读取一批代理IP,访问网页的时候不断轮换,这样就是一个最简单的实现。但是这样有一个比较大的问题,就是你每写一个爬虫就要实现这样的模块,多个爬虫之前还不能共享代理IP资源。
这里我想到利用一个本地代理来实现这个效果,那么爬虫只要连接到这一个代理,他在帮忙访问最终页面的时候再使用一个代理池不断轮换。这个方案既解决了代码重复的问题,又解决了多个爬虫都要维护代理IP列表的麻烦,而且部署起来也非常简单。
经过本方案改造前后的部署示意图:
我这里用Jetty7的proxy server做了一个简单的例子,实现了本地代理的功能,代码非常简单,贴出来大家一起学习下吧。
public class WiseProxyServlet extends ProxyServlet { public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { _client.setProxy(getProperAddress()); super.service(req, res); } /** * 这应该是在一个代理池中按照一定的规则来不断切换代理 */ private Address getProperAddress() { return new Address("222.169.11.102", 8080); } }
public class WiseProxyServer { public static void main(String[] args) throws Exception { Server server = new Server(); SelectChannelConnector connector = new SelectChannelConnector(); connector.setPort(8888); server.addConnector(connector); HandlerCollection handlers = new HandlerCollection(); server.setHandler(handlers); // Setup proxy servlet ServletContextHandler context = new ServletContextHandler(handlers, "/", ServletContextHandler.SESSIONS); ServletHolder proxyServlet = new ServletHolder(WiseProxyServlet.class); context.addServlet(proxyServlet, "/*"); // Setup proxy handler to handle CONNECT methods ConnectHandler proxy = new ConnectHandler(); handlers.addHandler(proxy); server.start(); } }
0 0
- http://passover.blog.51cto.com/2431658/502232
- tomcat优化-有改protocol 和 缓存 集群方案 转载自http://passover.blog.51cto.com/2431658/732629
- http://enchen.blog.51cto.com/716040
- http://xcshen.blog.51cto.com/流媒体
- http://cxxsoft.blog.51cto.com
- 我的博客 http://realzjy.blog.51cto.com
- http://fxh7622.blog.51cto.com/63841/337456
- http://lavasoft.blog.51cto.com/62575/27069/
- 博客换了地方http://byteh.blog.51cto.com/
- 搬家了http://opheliawei.blog.51cto.com/
- http://zhangziqiang.blog.51cto.com/698396/500213
- http://terryblog.blog.51cto.com/1764499/d-9
- http://tianzt.blog.51cto.com/459544/343905
- http://rainbird.blog.51cto.com/211214/805173
- http://qingwang.blog.51cto.com/505009/1143317
- http://tonyty163.blog.51cto.com/721698/463515
- http://fghjk.blog.51cto.com/4359709/772688
- http://jackielieu.blog.51cto.com/5586910/1161944
- phoneGap ios7 适配
- HTTP请求方式 .
- 记录
- Linux spi驱动分析(四)----SPI设备驱动(W25Q32BV)
- Detect browser language——查看浏览器语言
- http://passover.blog.51cto.com/2431658/502232
- linux 几种内建函数的介绍
- 话题讨论:怎样让数据可视化落地?
- ORACLE物化视图
- 浅谈全自动叠片过滤器运行原理与范围
- Undefined symbols for architecture i386
- Android学习--浅谈WebView的使用
- mini2440 SPI驱动移植
- 用ATL创建COM组件详细解说