Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

PyCN/IPProxyPool

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

50 Commits

Repository files navigation

IPProxyPool

IPProxyPool代理池项目,提供代理ip。支持py2和py3两个版本。
由于验证ip匿名性的网站挂掉了,因此现在抓取的ip无法判断是否匿名,特此说明。
如果大家有验证ip匿名性的网站,请及时通知我。
详细使用方式,请看我的博客: http://www.cnblogs.com/qiyeboy/p/5693128.html
最近几周我会比较忙,会陆续添加更多功能,敬请期待。大家可以关注我的公众号,更新我会及时通知。
####我的微信公众号:

希望大家提供更多的代理网站,现在爬取的好用的代理ip还是太少。
同时感谢super1-chen,fancoo,Leibnizhu对项目的贡献。
##项目依赖 ####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的实现方式添加进来。

如何使用

将项目目录clone到当前文件夹

$ git clone

切换工程目录

$ cd IPProxyPool
$ cd IPProxyPool_py2 或者 cd IPProxyPool_py3

运行脚本

python IPProxy.py

成功运行后,打印信息

IPProxyPool----->>>>>>>>beginning
http://0.0.0.0:8000/
IPProxyPool----->>>>>>>>db exists ip:0
IPProxyPool----->>>>>>>>now ip num < MINNUM,start crawling...
IPProxyPool----->>>>>>>>Success ip num :134,Fail ip num:7882

API 使用方法

第一种模式

GET /

这种模式用于查询代理ip数据,同时加入评分机制,返回数据的顺序是按照评分由高到低,速度由快到慢制定的。 ####参数

Name Type Description
types int 0: 高匿代理, 1 透明
protocol int 0: http, 1 https
count int 数量
country str 国家
area str 地区

例子

#####IPProxys默认端口为8000,端口可以在config.py中配置。 #####如果是在本机上测试: 1.获取5个ip地址在中国的高匿代理:http://127.0.0.1:8000/?types=0&count=5&country=中国
2.响应为JSON格式,按照评分由高到低,响应速度由高到低的顺序,返回数据:

[["122.226.189.55", 138, 10], ["183.61.236.54", 3128, 10], ["61.132.241.109", 808, 10], ["183.61.236.53", 3128, 10], ["122.227.246.102", 808, 10]]

以["122.226.189.55", 138, 10]为例,第一个元素是ip,第二个元素是port,第三个元素是分值score。 ``` import requests import json r = requests.get('http://127.0.0.1:8000/?types=0&count=5&country=中国') ip_ports = json.loads(r.text) print ip_ports ip = ip_ports[0][0] port = ip_ports[0][1] proxies={ 'http':'http://%s:%s'%(ip,port), 'https':'http://%s:%s'%(ip,port) } r = requests.get('http://ip.chinaz.com/',proxies=proxies) r.encoding='utf-8' print r.text ``` #### 第二种模式 ``` GET /delete ``` 这种模式用于方便用户根据自己的需求删除代理ip数据 ####参数
Name Type Description
ip str 类似192.168.1.1
port int 类似 80
types int 0: 高匿代理, 1 透明
protocol int 0: http, 1 https
count int 数量
country str 国家
area str 地区
大家可以根据指定以上一种或几种方式删除数据。

例子

#####如果是在本机上测试: 1.删除ip为120.92.3.127的代理:http://127.0.0.1:8000/delete?ip=120.92.3.127
2.响应为JSON格式,返回删除的结果为成功,失败或者返回删除的个数,类似如下的效果:

["deleteNum", "ok"]或者["deleteNum", 1]

import requests
r = requests.get('http://127.0.0.1:8000/delete?ip=120.92.3.127')
print r.text

TODO

1.可自主选择添加squid反向代理服务器,简化爬虫配置

更新进度

-----------------------------2016年12月11日---------------------------- ####大规模重构,主要包括以下几个方面: 1.使用多进程+协程的方式,将爬取和验证的效率提高了50倍以上,可以在几分钟之内获取所有的有效IP
2.使用web.py作为API服务器,重构HTTP接口
3.增加Mysql,MongoDB等数据库的适配
4.增加了三个代理网站
5.增加评分机制,评比稳定的ip
6.支持python3
-----------------------------2016年11月24日----------------------------
1.增加chardet识别网页编码
2.突破66ip.cn反爬限制
-----------------------------2016年10月27日----------------------------
1.增加对代理的检测,测试是否能真正访问到网址,实现代理
2.添加通过正则表达式和加载插件解析网页的方式
3.又增加一个新的代理网站

-----------------------------2016年7月20日----------------------------
1.修复bug ,将数据库进行压缩

About

IPProxyPool代理池项目,提供代理ip

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%

AltStyle によって変換されたページ (->オリジナル) /