您的位置:首页 > 数据库 > Redis

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

2018-03-23 21:19 483 查看
一个好的爬虫,必备利器——代理池,有了代理池,我们的爬虫才能放开速度的爬取!
这里介绍一个使用爬虫爬取国内免费代理网站,在通过验证后存到数据库,然后使用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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐