使用爬虫,Flask,redis创建一个动态代理池

一个好的爬虫,必备利器——代理池,有了代理池,我们的爬虫才能放开速度的爬取!

这里介绍一个使用爬虫爬取国内免费代理网站,在通过验证后存到数据库,然后使用Flsak生成一个api接口,供我们提取数据库的数据,这样,我们就可以将代理池放到服务器,可以让多台设备来一起共用


此代理池在获取IP的时候使用了pop方法一次性使用

### 安装Python

至少Python3.5以上

### 安装Redis

安装好之后将Redis服务开启

### 配置代理池

```
cd proxypool
```

进入proxypool目录,修改settings.py文件

PASSWORD为Redis密码,如果为空,则设置为None

#### 安装依赖

```
aiohttp>=1.3.3
Flask>=0.11.1
redis>=2.10.5
requests>=2.13.0
pyquery>=1.2.17
```
#### 打开代理池和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


  > 设置


## 项目参考

【https://github.com/zhangzhuang16/ProxyPool】(https://github.com/zhangzhuang16/ProxyPool)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值