开源IP代理池
继上一篇开源项目IPProxys的使用之后,大家在github,我的公众号和博客上提出了很多建议。经过两周时间的努力,基本完成了开源IP代理池IPProxyPool的重构任务,业余时间基本上都花在上面了。(我的新书《Python爬虫开发与项目实战》发布了,大家在这里可以看到样章)
IPProxyPool相对于之前的版本完成了哪些提升呢?主要包括一下几个方面:
- 使用多进程+协程的方式,将爬取和验证的效率提高了50倍以上,可以在几分钟之内获取所有的有效IP
- 使用web.py作为API服务器,重构HTTP接口
- 增加Mysql,MongoDB等数据库的适配
- 支持python3
- 增加了三个代理网站
- 增加评分机制,评比稳定的ip
大家如果感兴趣,可以到github上clone IPProxyPool源码,已经500多 star了。
下面说明一下使用方法:
项目依赖
Ubuntu,debian
1.安装sqlite数据库(一般系统内置): apt-get install sqlite3
2.安装requests,chardet,web.py,gevent: pip install requests chardet web.py sqlalchemy gevent
3.安装lxml: apt-get install python-lxml
注意:
- python3下的是pip3
- 有时候使用的gevent版本过低会出现自动退出情况,请使用pip install gevent --upgrade更新
- 在python3中安装web.py,不能使用pip,直接下载py3版本的源码进行安装
Windows
1.下载sqlite,路径添加到环境变量
2.安装requests,chardet,web.py,gevent: pip install requests chardet web.py sqlalchemy gevent
3.安装lxml: pip install lxml或者下载lxml windows版
注意:
- python3下的是pip3
- 有时候使用的gevent版本过低会出现自动退出情况,请使用pip install gevent --upgrade更新
- 在python3中安装web.py,不能使用pip,直接下载py3版本的源码进行安装
扩展说明
本项目默认数据库是sqlite,但是采用sqlalchemy的ORM模型,通过预留接口可以拓展使用MySQL,MongoDB等数据库。 配置方法: ‘’
1.MySQL配置
第一步:首先安装MySQL数据库并启动
第二步:安装MySQLdb或者pymysql(推荐)
第三步:在config.py文件中配置DB_CONFIG。如果安装的是MySQLdb模块,配置如下:
DB_CONFIG={
'DB_CONNECT_TYPE':'sqlalchemy',
'DB_CONNECT_STRING' = 'mysql+mysqldb://root:root@localhost/proxy?charset=utf8'
}
如果安装的是pymysql模块,配置如下:
DB_CONFIG={
'DB_CONNECT_TYPE':'sqlalchemy',
'DB_CONNECT_STRING' = 'mysql+pymysql://root:root@localhost/proxy?charset=utf8'
}
sqlalchemy下的DB_CONNECT_STRING参考支持数据库,理论上使用这种配置方式不只是适配MySQL,sqlalchemy支持的数据库都可以,但是仅仅测试过MySQL。
2.MongoDB配置
第一步:首先安装MongoDB数据库并启动
第二步:安装pymongo模块
第三步:在config.py文件中配置DB_CONFIG。配置类似如下:
DB_CONFIG={
'DB_CONNECT_TYPE':'pymongo',
'DB_CONNECT_STRING' = 'mongodb://localhost:27017/'
}
由于sqlalchemy并不支持MongoDB,因此额外添加了pymongo模式,DB_CONNECT_STRING参考pymongo的连接字符串。
注意:
如果大家想拓展其他数据库,可以直接继承db下ISqlHelper类,实现其中的方法,具体实现参考我的代码,然后在DataStore中导入类即可。
try:
if DB_CONFIG['DB_CONNECT_TYPE'] == 'pymongo':
from db.MongoHelper import MongoHelper as SqlHelper
else:
from db.SqlHelper import SqlHelper as SqlHelper
sqlhelper = SqlHelper()
sqlhelper.init_db()
except Exception,e:
raise Con_DB_Fail
有感兴趣的朋友,可以将Redis的实现方式添加进来。
具体的使用方法,大家请到github上看使用说明。欢迎大家赞赏分享。