Skip to content

amumu-dev/IPProxyTool

 
 

Repository files navigation

IPProxyTool

使用 scrapy 爬虫抓取代理网站,获取大量的免费代理 ip。过滤出所有可用的 ip,存入数据库以备使用。

####个人项目欢迎加微信吐槽

##运行环境 python 2.7.12

###运行依赖包

  • scrapy
  • BeautifulSoup
  • requests
  • mysql-connector-python 安装参考
  • web.py
  • scrapydo
  • lxml

###安装 Mysql

  • 安装 Mysql 并启动
  • 安装 mysql-connector-python 安装参考

##下载使用 将项目克隆到本地

$ git clone https://github.com/awolfly9/IPProxyTool.git

进入工程目录

$ cd IPProxyTool

修改 mysql 数据库配置 config.py 中 database_config 的用户名和密码为数据库的用户名和密码

$ vim config.py
---------------

database_config = {
	'host': 'localhost',
	'port': 3306,
	'user': 'root',
	'password': '123456',
}

分别运行代理抓取、验证、服务器 脚本

$ python runspider.py 
$ python runvalidator.py 
$ python runserver.py

##项目说明 ####抓取代理网站 所有抓取代理网站的代码都在 proxy
#####扩展抓取其他的代理网站 1.在 proxy 目录下新建脚本并继承自 BaseSpider
2.设置 name、urls、headers
3.重写 parse_page 方法,提取代理数据
4.将数据存入数据库 具体可以参考 ip181 kuaidaili
5.如果需要抓取特别复杂的代理网站,可以参考peuland

#####修改 runspider.py 导入抓取库,添加到抓取队列

运行 runspider.py 脚本开始抓取代理网站

$ python runspider.py

####验证代理 ip 是否有效 目前验证方式:
1.从上一步抓取并存储的数据库中取出所有的代理 IP
2.利用取出的代理 IP 去请求 httpbin
3.根据请求结果判断出代理 IP 的有效性,是否支持 HTTPS 以及匿名度,并存储到表 httpbin 中
4.从 httpbin 表中取出代理去访问目标网站,例如 豆瓣
5.如果请求在合适的时间返回成功的数据,则认为这个代理 IP 有效。并且存入相应的表中

一个目标网站对应一个脚本,所有验证代理 ip 的代码都在 validator #####扩展验证其他网站 1.在 validator 目录下新建脚本并继承 Validator
2.设置 name、timeout、urls、headers
3.然后调用 init 方法,可以参考 baidu douban
4.如果需要特别复杂的验证方式,可以参考 assetstore
#####修改runvalidator.py 导入验证库,添加到验证队列 运行 runvalidator.py 脚本开始抓取代理网站

$ python runvalidator.py

###获取代理 ip 数据服务器接口 在 config.py 中修改启动服务器端口配置 data_port,默认为 8000 启动服务器

$ python runserver.py

服务器提供接口 ####获取 http://101.200.55.192:8000/select?name=douban&anonymity=1&https=yes&sort=speed&count=100

参数

Name Type Description 是否必须
name str 数据库名称
anonymity int 1:高匿 2:匿名 3:透明
https str https:yes http:no
sort str 排序依据,默认 speed 升序
count int 获取代理数量,默认 100

####删除 http://127.0.0.1:8000/delete?name=free_ipproxy&ip=27.197.144.181

参数

Name Type Description 是否必须
name str 数据库名称
ip str 需要删除的 ip

####插入 http://127.0.0.1:8000/insert?name=douban&ip=555.22.22.55&port=335&country=%E4%B8%AD%E5%9B%BD&anonymity=1&https=yes&speed=5&source=100

参数

Name Type Description 是否必须
name str 数据库名称
ip str ip 地址
port str 端口
country str 国家
anonymity int 1:高匿,2:匿名,3:透明
https str yes:https,no:http
speed float 访问速度
source str ip 来源

##TODO

  • 添加抓取更多免费代理网站
  • 分布式部署项目
  • 添加服务器获取接口更多筛选条件
  • 添加 https 支持
  • 添加检测 ip 的匿名度

##参考

##项目更新 -----------------------------2017-2-20----------------------------
1.添加服务器获取接口更多筛选条件

-----------------------------2017-2-16----------------------------
1.验证代理 IP 的匿名度
2.验证代理 IP HTTPS 支持
3.添加 httpbin 验证并发数设置,默认为 4

About

抓取大量免费代理 ip,提取有效 ip 使用

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%