架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 11766|回复: 2

浅析分布式爬虫使用代理IP的几种方案

[复制链接]
发表于 2018-7-17 13:54:35 | 显示全部楼层 |阅读模式
没有代理IP,爬虫工作将寸步难行,所以很多爬虫工程师都需要去选购高效稳定的代理IP。有了优质代理IP后,是不是就可以高枕无忧了呢?事情没有那么简单,还需要优化方案,合理分配资源,提高工作效率,更高效更快速更稳定的进行爬虫工作。

方案一:每个进程从接口API中随机取一个IP列表(比如一次提取100个IP)来循环使用,失败则再调用API获取,大概逻辑如下:

1、每个进程(或线程),从接口随机取回一批IP回来,循环尝试IP列表去抓取数据;

2、如果访问成功,则继续抓取下一条。

3、如果失败了(比如超时、出现验证码等),再从接口取一批IP,继续尝试。

方案缺点:每个IP都是有有效期的,如果提取了100个,当使用了第10个的时候,可能后面的大部分都失效了。如果你设置HTTP请求的时候连接时间超时为3秒,读取时间超时为5秒,那你将会有可能浪费3-8秒的时间,说不定这3-8秒已经可以抓取几十次了。

方案二:每个进程从接口API中随机取一个IP来使用,失败则再调用API获取一个IP,大概逻辑如下:

1、每个进程(或线程),从接口随机取回一个IP来,用这个IP去访问资源,

2、如果访问成功,则继续抓下一条。

3、如果失败了(比如超时、出现验证码等),再从接口随机取一个IP,继续尝试。

方案缺点:调用API获取IP的行为非常频繁,会对代理服务器造成非常大的压力,影响API接口稳定,可能会被限制提取。这种方案也不适合,不能持久稳定的运行。

方案三:先提取大量IP导入本地数据库,从数据库里面取IP,大概逻辑如下:

1、在数据库里面建一个表,写一个导入脚本,每分钟请求多少次API(咨询代理IP服务商建议),把IP列表导入到数据库里面。

2、在数据库里面记录好 导入时间、IP、Port、过期时间、IP可用状态 等字段;

3、写一个抓取脚本,抓取脚本从数据库里面读取可用IP,每个进程从数据库获取一个IP进行使用。

4、执行抓取,对结果进行判断,处理cookie等,只要出现验证码或者失败就放弃这个IP,重新换一个IP。

这种方案有效的避开了代理服务器资源的消耗,有效的分配代理IP的使用,更加的高效和稳定,保障了爬虫工作的持久性和稳定性。




上一篇:如何使用Hreflang进行搜索引擎优化
下一篇:ERROR 1093 (HY000): You can't specify target table 'xxx' for upda...
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2018-7-18 14:50:55 | 显示全部楼层
方案三和方案一不是一个样么,提取大量IP,后面没使用的那些不久过期了么
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2019-1-29 21:06:25 | 显示全部楼层
mark,思路学习了,之后我写个试试
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2025-7-11 22:39

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表