自建代理池与自动登录

此文已在本人个人微信公众号(iwoods100,不会下厨的健身爱好者不是一个好程序员)首发,关注可查阅全部文章。


爬虫抓取量达到一定规模时,会遇到抓取网站被ban的场景,尤其是抓取单平台上的大量帐号文章,比如微信公众号,微博,知乎等。此时使用代理池与自动登录能极大缓解这一压力。


代理池概要


简单来说,代理池的职责是负责维护与分配一定数量的ip代理,基于不同的场景进行代理池维护,以下是我遇到并实现的一些场景:


  •  获取代理时应提供访问的网站域名,因为一个代理可以被同时用来访问微信与微博,微信被ban并不会导致微博被ban,所以代理池在逻辑层上要支持对不同类型的网站分开管理使用分配记录。

  • 指定代理的使用间隔,控制代理使用频率。

  • 代理池分为无状态和有状态两种。首先,从代理池获取代理时需要调用方提供一个id,对于有状态的代理,该id每次返回的代理一定是相同的,而无状态则没有此限制,会随机分配。


重点在于有状态代理池,它能解决帐号登录与访问都使用固定ip。


对于有状态代理池,在实际应用过程中,代理数量可能会动态增减,那么会涉及到一个问题,原先的一部分id需要映射到新的代理上,从而降低代理平均负载,为了尽可能少的影响原有的id与代理之间的映射关系,可以使用一致性hash算法来解决。


我使用的代理软件是squid,在github上有开源的docker版。


自动登录概要


自动登录就是使用帐号与密码模拟网站登录(有时候会需要验证码,可接入打码平台解决),保存登录成功的cookies供以后使用,结合上面的代理池,对于同一个帐号,在自动登录与登录后都使用同一个id去获取代理,就能保证始终使用的是一个ip地址,避免帐号异地访问被封号的风险。


你可能感兴趣的:(自建代理池与自动登录)