项目作者: awolfly9

项目描述 :
python ip proxy tool scrapy crawl. 抓取大量免费代理 ip,提取有效 ip 使用
高级语言: Python
项目地址: git://github.com/awolfly9/IPProxyTool.git
创建时间: 2016-12-05T12:52:21Z
项目社区:https://github.com/awolfly9/IPProxyTool

开源协议:MIT License

下载


IPProxyTool

使用 scrapy 爬虫抓取代理网站,获取大量的免费代理 ip。过滤出所有可用的 ip,存入数据库以备使用。
可以访问我的个人站点,查看我的更多有趣项目 西瓜

感谢 youngjeff 和我一起维护该项目

运行环境

安装 python3 and mysql 数据库

cryptography模块安装环境:

  1. sudo yum install gcc libffi-devel python-devel openssl-devel
  1. $ pip install -r requirements.txt

下载使用

将项目克隆到本地

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

进入工程目录

  1. $ cd IPProxyTool

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

  1. $ vim config.py
  2. ---------------
  3. database_config = {
  4. 'host': 'localhost',
  5. 'port': 3306,
  6. 'user': 'root',
  7. 'password': '123456',
  8. 'charset': 'utf8',
  9. }

MYSQL: 导入数据表结构

  1. $ mysql> create database ipproxy;
  2. Query OK, 1 row affected (0.00 sec)
  3. $ mysql> use ipproxy;
  4. Database changed
  5. $ mysql> source '/你的项目目录/db.sql'

运行启动脚本 ipproxytool.py 也可以分别运行抓取,验证,服务器接口脚本,运行方法参考项目说明

  1. $ python ipproxytool.py

新增异步验证方式,运行方法如下

  1. $ python ipproxytool.py async


项目说明

抓取代理网站

所有抓取代理网站的代码都在 proxy

扩展抓取其他的代理网站

1.在 proxy 目录下新建脚本并继承自 BaseSpider

2.设置 name、urls、headers

3.重写 parse_page 方法,提取代理数据

4.将数据存入数据库 具体可以参考 ip181 kuaidaili

5.如果需要抓取特别复杂的代理网站,可以参考peuland

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

可以单独运行 run_crawl_proxy.py 脚本开始抓取代理网站

  1. $ python run_crawl_proxy.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

修改 run_validator.py 导入验证库,添加到验证队列

可以单独运行 run_validator.py 开始验证代理ip的有效性

  1. $ python run_validator.py

获取代理 ip 数据服务器接口

在 config.py 中修改启动服务器端口配置 data_port,默认为 8000
启动服务器

  1. $ python run_server.py

服务器提供接口

获取

http://127.0.0.1:8000/select?name=httpbin&anonymity=1&https=yes&order=id&sort=desc&count=100

参数

Name Type Description must
name str 数据库名称
anonymity int 1:高匿 2:匿名 3:透明
https str https:yes http:no
order str table 字段
sort str asc 升序,desc 降序
count int 获取代理数量,默认 100

删除

http://127.0.0.1:8000/delete?name=httpbin&ip=27.197.144.181

参数

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

插入

http://127.0.0.1:8000/insert?name=httpbin&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

参考

项目更新

——————————————-2020-12-29——————————————

  1. 修改之前错误的路径命名
  2. 修改mysql 表结构


    ——————————————-2017-6-23——————————————

    1.python2 -> python3

    2.web.py -> flask



    ——————————————-2017-5-17——————————————

    1.本系统在原来的基础上加入了docker。操作见下方,关于docker的相关知识可以上官网看看http://www.docker.com.



    ——————————————-2017-3-30——————————————

    1.修改完善 readme

    2.数据插入支持事务



    ——————————————-2017-3-14——————————————

    1.更改服务器接口,添加排序方式

    2.添加多进程方式验证代理 ip 的有效性



    ——————————————-2017-2-20——————————————

    1.添加服务器获取接口更多筛选条件


——————————————-2017-2-16——————————————

1.验证代理 IP 的匿名度

2.验证代理 IP HTTPS 支持

3.添加 httpbin 验证并发数设置,默认为 4

在系统中安装docker就可以使用本程序:

下载本程序

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

然后进入目录:

  1. cd IPProxyTool

创建镜像:

  1. docker build -t proxy .

运行容器:

  1. docker run -it proxy

在config.py中按照自己的需求修改配置信息

  1. database_config = {
  2. 'host': 'localhost',
  3. 'port': 3306,
  4. 'user': 'root',
  5. 'password': 'root',
  6. 'charset': 'utf8',
  7. }