使用爬虫,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)
这里介绍一个使用爬虫爬取国内免费代理网站,在通过验证后存到数据库,然后使用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)
相关文章推荐
- 使用scrapy,redis, mongodb实现的一个分布式网络爬虫
- 利用CVSNT在Eclipse中使用CVS--3.创建一个CVS实例
- 使用 Apache Jakarta POI 从多个数据库创建一个 Excel 报表
- 使用GDI+ for .NET创建一个含有水印效果的照片
- FlashCom学习第二课:创建一个使用视频的简单的Flash动画
- CodeProject - 使用GDI+ for .NET创建一个含有水印效果的照片
- 如何使用C#创建一个三层的数据库应用程序
- 使用Action创建一个JButton后,改变该按钮的名字可能会遇到意想不到的问题
- 使用Spring来创建一个简单的工作流引擎
- 刚才写的一个vbscript创建目录的方法 该方法可一次创建多层目录 不使用递归
- 如何通过使用 ADOX 和 VisualBasic.NET 创建一个 MicrosoftAccess 数据库
- 使用.net技术创建一个小型对象池
- 在vb中使用Iphlpapi.dll获取网络信息 第二章 第十八节 在本地电脑的地址解析协议(ARP )表中创建和删除一个ARP
- CodeProject - 使用GDI+ for .NET创建一个含有水印效果的照片
- CodeProject - 使用GDI+ for .NET创建一个含有水印效果的照片
- 使用TClientDateSet 在内存中创建一个临时表
- IronPython for ASP.NET:使用IronPython创建一个简单的Web页面
- 使用Office Web Components (OWC)来创建统计图的一个数据类。
- 使用GDI+ for .NET创建一个含有水印效果的照片
- 100% .NET Control_使用CurrencyManager 创建一个导航条来控制DatagGrid的XNavBar控件(VB.NET).