IPProxyPool代理池重构

作者: qiye | 来源:发表于2016-12-12 13:02 被阅读1121次

开源IP代理池

继上一篇开源项目IPProxys的使用之后,大家在github,我的公众号和博客上提出了很多建议。经过两周时间的努力,基本完成了开源IP代理池IPProxyPool的重构任务,业余时间基本上都花在上面了。(我的新书《Python爬虫开发与项目实战》发布了,大家在这里可以看到样章
IPProxyPool相对于之前的版本完成了哪些提升呢?主要包括一下几个方面:

  • 使用多进程+协程的方式,将爬取和验证的效率提高了50倍以上,可以在几分钟之内获取所有的有效IP
  • 使用web.py作为API服务器,重构HTTP接口
  • 增加Mysql,MongoDB等数据库的适配
  • 支持python3
  • 增加了三个代理网站
  • 增加评分机制,评比稳定的ip

大家如果感兴趣,可以到github上clone IPProxyPool源码,已经500多 star了。

IPProxyPool

下面说明一下使用方法:

项目依赖

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上看使用说明。欢迎大家赞赏分享。

相关文章

  • IPProxyPool代理池重构

    开源IP代理池 继上一篇开源项目IPProxys的使用之后,大家在github,我的公众号和博客上提出了很多建议。...

  • day72 - 代理

    免费代理代理池 付费代理

  • 对代理池搭建的一些理解

    搭建代理池的用处有许多,爬虫是使用代理池较多的一种。 尝试过搭建简单的代理池,记录一下,搭建过程。 代理池需要如下...

  • 爬虫(2)--- 构建简单代理IP池

    目录 1. 何为代理IP池?2. 代理IP池构建2.1 浏览器伪装2.2 代理IP爬取2.3 代理IP验证2.4 ...

  • 代理池

    代理池的作用 解决短时间内频繁爬取统一网站导致IP封锁的情况。具体工作机制:从各大代理网站抓取免费IP —— 去重...

  • 代理池

    1.首先创建一个获取代理ip的类,这里取名为ProxyPool。 这个ProxyPool类中有两个方法: get_...

  • 线程池的使用

    1.创建线程池代理者,由于创建线程池所需参数过多,因此封装在代理者中创建,需要拿到线程池对象时,找其代理者即可 2...

  • asyncio实现代理池

    从一个代理池讲起? 搞爬虫的一般都有自己的代理池,代理池的结构一般分为抓取模块,存储模块,检测模块,api模块。抓...

  • 如何给自己搭建一个爬虫代理IP池?

    本文关键词:爬虫代理IP池,稳定的爬虫代理ip,搭建代理ip池 在这篇文章之前, 应该不少人都看过很多搭建代理ip...

  • 维护动态代理池

    代理池要求 多站抓取,异步检测 定时筛选,持续更新 提供接口,易于提取 代理池架构 获取器: 从各大网站上获取代理...

网友评论

    本文标题:IPProxyPool代理池重构

    本文链接:https://www.haomeiwen.com/subject/dfymmttx.html