Redis主要用来维护池,提供池的队列存储
关于Redis的安装与配置,可见点击打开链接
Flask来实现池的接口,用它来从中拿出内容
代理池:
作用:用来伪装IP,更好地利用代理资源来应对站点的反爬虫策略
要求:多站抓取,异步检测
定时筛选,持续更新
提供接口,易于提取(利用Python的Flask包来提供web接口)
代理池的架构:
代理池的实现:此处贴上Github上大佬的开源项目
将其代码down下来,发现其结构如下:
配置代理池
cd proxypool
进入proxypool目录,修改settings.py文件
PASSWORD为Redis密码,如果为空,则设置为None
安装依赖
pip3 install -r requirements.txt
打开代理池和API
python3 run.py
获取代理
利用requests获取方法如下
import requests
PROXY_POOL_URL = 'http://localhost:5000/get'
def get_proxy():
try:
response = requests.get(PROXY_POOL_URL)
if response.status_code == 200:
return response.text
except ConnectionError:
return None
各模块功能
-
getter.py
爬虫模块
-
class proxypool.getter.FreeProxyGetter
爬虫类,用于抓取代理源网站的代理,用户可复写和补充抓取规则。
-
-
schedule.py
调度器模块
-
class proxypool.schedule.ValidityTester
异步检测类,可以对给定的代理的可用性进行异步检测。
-
class proxypool.schedule.PoolAdder
代理添加器,用来触发爬虫模块,对代理池内的代理进行补充,代理池代理数达到阈值时停止工作。
-
class proxypool.schedule.Schedule
代理池启动类,运行RUN函数时,会创建两个进程,负责对代理池内容的增加和更新。
-
-
db.py
Redis数据库连接模块
-
class proxypool.db.RedisClient
数据库操作类,维持与Redis的连接和对数据库的增删查该,
-
-
error.py
异常模块
-
class proxypool.error.ResourceDepletionError
资源枯竭异常,如果从所有抓取网站都抓不到可用的代理资源,
则抛出此异常。
-
class proxypool.error.PoolEmptyError
代理池空异常,如果代理池长时间为空,则抛出此异常。
-
-
api.py
API模块,启动一个Web服务器,使用Flask实现,对外提供代理的获取功能。
-
utils.py
工具箱
-
setting.py
设置
Cookie池:
为什么要维护cookie池??
1.有的网站需要登录后才能爬取,如新浪微博
2.爬取过程中如果频率过高会导致封号,那么如果想要获得非常多的数据,则需要非常多的账号
cookie池的要求:
1.自动登录更新
2.定时验证筛选
3.提供外部接口(可将池架在远程的服务器上,实现远程部署)
cookie池的架构
cookie池的实现:需要先将一定量的账号密码之类的cookie存进Redis数据库,然后利用python调用并维护
关于cookies池的维护,有以下开源项目案例可供参考: