Python数据采集与爬虫Python3自学 爬虫实战爬虫专题

python 代理池升级版v1.1

2017-11-12  本文已影响224人  起个名忒难

python 代理池升级版v1.1

概述

前段时间,因为项目的需要,简单的实现了一个代理池,只是实现了预想的基本功能,后边想在完善。可是没想到我太(tai)忙(lan)了(le),之前也有反馈各种bug,一直没有维护,作为一个崇尚开源的超能力者,既然开源了,只要有人在用就应该维护下去,于是花了点时间,有重新做了一下设计,只是没想到,这一拖竟然是7个月之后。

代理池的1.0版在这 ,这个应该能体现我最初的想法。

最近花了点时间,对项目进行了整体的重构。开源地址见文末。

新特性

说一下这次重构后添加的新特性 :

框架图

模块设计

核心时序图

核心时序图.png

上面的两幅图,基本上已经体现了代理池的核心逻辑,既然是池,就要有新源的注入,不然就成为一个死池,所以定时任务就是这个新源,网络上的免费ip资源可用性本来就不是很高,交流学习可以用,生产环境就不要想了,因为特别的不稳定。

依赖库

程序默认数据库类型为mongodb ,请确保已经安装该库,并能成功启动。

APScheduler==3.3.1
Flask==0.12.1
lxml==3.7.3
requests==2.13.0
pymongo==3.4.0

相关的依赖库及版本号已经导入到requirements.txt中,可以使用(venv) $ pip install -r requirements.txt 命令安装依赖

使用配置

conf.ini

[db]
#数据库类型
db_type = mongodb
db_host = 127.0.0.1
db_port = 27017

[freeProxy]
firstFreeProxy = firstFreeProxy
secondFreeProxy = secondFreeProxy
thirdFreeProxy = thirdFreeProxy
fourFreeProxy = thirdFreeProxy
fiveFreeProxy = thirdFreeProxy
sixFreeProxy = thirdFreeProxy
sevenFreeProxy = thirdFreeProxy
eightFreeProxy = eightFreeProxy

[WebApi]
port = 5001

[config]
#是否删除原有数据
isDelete = 1
#是否启用邮件通知
isEmail = 1

[WebUrl]
verifyUrl = 'http://www.baidu.com'

常量文件 Constants.py

'''配置文件键值对'''
db = 'db'
db_type = 'db_type'
db_host = 'db_host'
db_port = 'db_port'
db_name = 'db_name'
freeProxy = "freeProxy"

'''定义数据库类型'''
mongodb = 'mongodb'
redisdb = 'redis'
mysqldb = 'mysql'

'''定义参数常量'''
type = 'type'
name = 'name'
host = 'host'
port = 'port'
clazz = 'getfreeproxy'

'''配置数据库相关信息'''
mongoClient = 'MongoDBClient'
dbName = "IpProxyPool" #数据库名字
commonPool = 'Common_IP'  #ip池总表
validatePool = 'verify_ip' #验证ip表
defaultHost = '127.0.0.1'  #默认本机地址
defaultPort = 27017        #端口默认为mongodb端口

'''Http请求配置'''
retryTime = 3
timeout = 30

'''进程配置'''
processNum = 3 #设置进程的数量
sleepTime = 60*31 #设置验证进程休眠的时间

'''任务下载刷新周期'''
schedulerMinutes = 30 #单位为分钟

'''邮件配置'''
smtp_server = 'smtp.xxx.com'
from_email = 'xxx' #发件人邮件地址
email_password = 'xxx'
to_email = 'xxx' #接收人邮件地址

'''打印日志输出等级配置'''
logLevel = 0  #0代表debug级别(默认) 1 为info 级别

若要修改程序的刷新时间,请修改上面的schedulerMinutes值,sleepTime 为数据库为空时的休眠时间。休眠时间应该大于定时刷新时间。默认刷新周期为30分钟,休眠时间为31分钟。关于日志的输出等级设置logLevel的值即可。

采用了约定大于配置的规则,在配置文件和常量文件中关于Key的设置尽量不要改变,以免产生不必要的麻烦,如果要更改数据库的类型,请参考常量文件的定义进行更改。在conf.ini中有一个[config]的配置,此版本没有用到。发送邮件的功能此版本也没有用到,预想是在网站进行改版,提取不到数据的情况下,程序自动发出邮件通知,及时通知开发人员进行提取规则的升级。另外程序只是内置了对mongodb的支持,工厂类实现了redis和mysql的相关代码,但是并没有创建实体类,如果要使用redis或者mysql或者其他的数据库, 请自行修改源码,参考mongodb实现方式。

新增ip源

关于ip源的增加,只需要修改两个地方,一个是CollectFreeProxy.py,将新增加的源,放入此文件中,第二个是修改conf.ini文件,修改【freeProxy】节点。具体请参考已有的代码。

启动

进入到此程序的根目录IpProxyPool文件夹下, 使用 :

python -m Run.Run

运行,若是第一次运行,效果图如下:


初次运行.png

提取ip

conf.ini ,端口默认为 5000 , 默认地址为 127.0.0.1/5000 . 会有相关api的介绍。

封装代理方法:

def proxy():
    import json
    response = requests.get('http://xxxx.xxxx.xxxx.xxxx:5001/get/')
    jsonStr = json.loads(response.text)
    proxy = jsonStr['proxy']
    proxy = {
        'http': proxy,
        'https': proxy}
    return proxy

地址:

源码地址:https://github.com/topyuluo/IPProxyPool

程序的下载地址:https://github.com/topyuluo/IPProxyPool.git 可下载zip文件。

版本迭代:

提供一个API地址:http://47.94.236.225:5001 ,单机,小水管机器,勿压测和频繁请求,谢谢 !

少年听雨歌楼上,红烛昏罗帐。  
壮年听雨客舟中,江阔云低,断雁叫西风。
感谢支持!
                                                                         ---起个名忒难

上一篇 下一篇

猜你喜欢

热点阅读