Python爬虫之构建代理池
在做网络爬虫时,最常遇到的也是最基本的防爬虫手段之一就是封IP。目标网站会因为某个IP过高的访问评率,而将其封掉,不再接受其请求。所以我们往往会使用大量的代理,但是代理从哪来呢?代理是否可用呢?这就需要我们构建一个代理池。
代理种类的介绍
代理根据代理服务端配置的不同,可以分为四类:
-
透明代理:
透明代理虽然可以直接“隐藏”我们的IP地址,但是可以知道是哪个IP使用这个代理进行转发的。 -
匿名代理:
匿名代理在透明代理的基础上,隐藏了我们的IP,所以人家知道我们使用了代理,但是不知道我们是谁。 -
混淆代理:
混淆代理伪装了使用者的IP,人家还是知道我们使用了代理,但是会得到一个假的IP。 -
高匿代理:
使用高匿代理,人家将无法发现我们使用了代理。
可以看出,爬虫时使用透明代理,基本上是没有什么用的。很多服务器会拒绝使用了代理的请求,所以匿名代理和混淆代理很多时候也是无法派上用场的,所以我们最好的选择就是高匿代理。
代理池的架构设计
问题思考
我们首先思考下面几个问题:
- 代理如何获取?
有很多免费的代理获取网站可以爬取和采集代理,当然还有很多可通过API的方式直接获取代理。也可以购买一些收费的代理,质量相对较高。 - 代理的质量如何,是否可用?
免费代理,包括很多收费代理,都不一定是可用的,有些可用代理的速度也是令人堪忧的,所以我们需要对于我们采集的代理进行定时检测,查看代理是否可用。 -
代理如何存储?
代理的存储,我们使用非关系型数据库(NoSQL)即可,本文使用Redis。 -
代理如何使用?
既然是个代理池,应该是独立于爬虫的,可通用多个爬虫或者其他业务,那最好的选择自然是做成一个web服务,通过web api获取即可。
模块设计
由上面的问题思考,我们将代理池分为五个模块:
- Getter:
获取模块,用于从代理源网站获取最新代理的模块,然后存入数据库,可进行代理网站扩展。 -
DB:
数据库模块,用来连接数据库,存储代理,对代理进行基本的增删改查,随机获取等等。 -
Tester:
测试模块,定时对数据库中的代理进行可用性测试和评分。 -
WebAPI:
api模块,可通过api获取可用代理等。 -
Schedule:
调度器模块,调度器模块是用来调用和分配各个模块进行工作的。
接下来就进入教程实战吧!
代理池开发
创建一个名为MyProxyPool的工程,安装我们需要的依赖库:Flask
, redis
, requests
, pyquery
, aiohttp
。
接下来:
- 数据库模块-Python爬虫之构建代理池(一)
- 获取模块-Python爬虫之构建代理池(二)
- 测试模块-Python爬虫之构建代理池(三)
- WEB API模块-Python爬虫之构建代理池(四)
- 调度器模块-Python爬虫之构建代理池(完结篇)
完整代码戳我
文章来源于互联网:Python爬虫之构建代理池