• 欢迎关注我的微信公众号!点击

代理池的搭建

Python 大坚果 6年前 (2018-05-29) 4187次浏览 0个评论 扫描二维码

爬虫的过程中,我们经常会遇见很多网站采取了防爬取技术,或者说因为自己采集网站信息的强度和采集速度太大,给对方服务器带去了太多的压力,所以你一直用同一个代理 ip 爬取这个网页,很有可能 ip 会被禁止访问网页,所以基本上做爬虫的都躲不过去 ip 的问题。因此,我们借助某种方式来伪装 IP,让服务器无法识别,也就是代理的使用。

代理的使用方法

代理池的维护

从网络获取可用的代理 IP,并保留可用 IP,搭建易用高效的代理池。主要分为四个模块:存储模块、获取模块、检测模块、接口模块。

存储模块

数据库–Redis;    要求–有序、不重复;    形式–127.22.22.22:8888

一个代理,就是Redis集合的一个元素。每个元素有一个分数字段,按照分数排序,分数大的排在后面,可用性就越大。

获取模块

  • 定义 Crawler 类:用来从各大网站抓取代理 IP。这里用到元类的知识点,实现扩展仅需添加以 crawl 开头的方法
  • 定义 Getter 类:动态调用所有 crawl 开头的方法,获取代理数据,最终存储到Redis数据库中

检测模块

将各个网站获取的代理进行多伦检测:可用则 100 分,不可用则减 1。采用异步请求库aiohttp检测

  • 方法前 async 关键词,代表此方法是异步的
  • 异步请求:在请求发出后,程序继续去做其他的事情;当响应到达时,程序再去处理此响应。避免程序堵塞的发生。

接口模块

  • 代理池作为独立的服务器运行,以 Web API 的形式使用代理 IP。
  • 这里使用轻量级Flask来实现,代理池部署到服务器上,多个爬虫共同使用

调度模块

调用获取、检测、接口模块,使得这 3 个模块以多进程的形式运行起来

 

Redis 数据库

Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key-value 数据库。代理池选用 Redis 主要由于其存储数据的有序性,直接使用开源的代理池构建方法。

启动方式

 


墨痕|畅所欲言的小笔记 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:代理池的搭建
喜欢 (2)

您必须 登录 才能发表评论!