爬虫代理 ip 使用方法及爬虫代理部署

不少人上手爬虫,最先碰到的麻烦就是IP封禁,也正是这个场景,让很多人开始接触代理IP。代理IP的本质不难理解,它会把网络请求的出口从本机切换到另一台远端服务器。目标网站读取到的访问来源IP变成代理节点,不再是你本机真实地址。一旦某个IP被拦截,直接切换下一个节点继续采集,爬虫任务不至于直接中断。

Python爬虫接入代理,不同代码库的写法差异很大。requests是日常最常用的库,依靠proxies参数配置代理,参数接收字典类型,键对应网络协议,值填写代理地址,示例{"http": "http://127.0.0.1:8080", "https": "http://127.0.0.1:8080"}。代理账号需要身份校验的话,认证信息直接写进URL,格式为http://user:pass@host:port。密码当中包含特殊符号时,必须提前做URL编码,不然解析会报错。只单独配置http代理,https请求有可能不走代理链路,稳妥做法是两个协议一并配置。

爬虫代理 ip 使用方法及爬虫代理部署

urllib写代理会繁琐很多,需要调用ProxyHandler搭配build_opener。做异步爬虫常选用aiohttp,代理直接作为参数传入session.get,代码写法相比urllib简洁不少。Scrapy依靠中间件机制实现代理,在settings开启HttpProxyMiddleware,再在spider内部,通过request.meta['proxy']给单次请求单独指定代理地址。带认证的代理在Scrapy原生支持不算稳定,遇到这类场景可以改用第三方中间件scrapy-proxies。

代理IP的来源,直接决定后续维护工作量。网上免费代理资源随处可见,GitHub随便检索就能拿到包含数千条IP的清单,但可用率极低。实测数据显示,从主流免费代理平台提取的IP,超过80%根本无法连通网络;能够成功连上的IP里面,仅有大约1%可以稳定运行半小时以上。免费代理只适合用来做功能调试,正式跑采集任务,付费代理或者自建代理会更可靠。付费代理一般按流量或者IP数量计费,品质参差不齐,购买前先用测试额度跑一遍,查看延迟和请求成功率再决定。

拿到代理地址,第一件事就是有效性校验。最简单的办法,使用该代理访问httpbin.org/ip,核对返回origin字段是否等于代理IP。如果返回的依旧是本机IP,代表代理没有生效,或者属于透明代理。透明代理会向外暴露真实IP,相当于没有做IP替换。匿名代理至少可以隐藏本机IP,高匿代理不会携带Via请求头,目标站点完全察觉不到代理的使用痕迹。

手动逐个检测大批量代理效率太低。写检测脚本时启用多线程或者异步方式,设置二十个并发同时测试,几秒内就能筛选出可用节点。校验通过的IP存入列表,爬虫每次发起请求随机挑选一条,请求失败就切换新IP,这就是基础代理池的实现思路。

代理池规模扩大之后,人工维护IP列表就不现实。更合适的方案是借助Redis存储代理,后台持续运行定时检测任务,每隔几分钟批量校验全部代理,剔除失效IP,保留可用节点。爬虫从Redis随机读取代理,使用完毕放回存储。这套方式可以稳定提升代理可用率。代理池代码本身并不复杂,核心就两个功能模块:抓取代理资源、校验代理可用性。抓取环节可以对接免费代理站点或者付费代理API,校验逻辑依旧是访问httpbin读取返回IP。

SOCKS代理和HTTP代理代码写法存在区别。requests使用SOCKS需要提前安装requests[socks],proxies配置填写socks5://host:port。aiohttp接入SOCKS要额外安装aiohttp-socks,Scrapy则需要部署scrapy-socks中间件。这几个库都不是原生支持SOCKS,都要额外安装依赖包。SOCKS5工作层级比HTTP代理更低,能够支持TCP与UDP流量,但部分场景下速度不如HTTP代理。

有不少隐藏问题需要提前留意。HTTPS代理依靠CONNECT方法建立连接,和普通GET请求不一样。部分代理仅支持HTTP协议,拿这类节点访问HTTPS网站会直接报错。代理响应延迟波动明显,同一个IP不同时段的延迟差距能有数倍,代理池需要持续刷新节点。并发请求数量过高,代理服务器承载不住,需要控制并发上限。另外爬虫使用代理采集数据,必须遵守目标站点robots.txt协议以及当地法规,不能用于违规操作。

自建代理是另一条可行方案。在VPS部署Squid或者TinyProxy,每月成本仅几美元,IP完全由自己掌控,不用担心服务商倒卖IP或者留存访问记录。缺点是需要自己负责运维,IP一旦封禁,就得更换VPS,弹性能力比不上商业代理池。适合隐私要求高、具备基础运维能力的团队。

代理不存在一劳永逸的方案,免费代理要频繁轮换,付费代理需要仔细挑选服务商,自建代理可控但维护成本更高。新手可以先从requests的proxies参数上手,把代理校验、IP轮换逻辑调试通,之后再迁移到Scrapy或者异步爬虫框架。网上开源代理池项目很多,挑选star数量高的项目直接部署,比从零编写代码节省大量时间。

免责声明:本文提供的方法与建议仅供技术参考,实际部署效果受机房环境、运营商线路、系统配置等多重因素影响。请在专业人员指导下操作,因自行操作导致的业务损失本站不承担责任。

相关推荐