Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/awolfly9/ipproxytool
python ip proxy tool scrapy crawl. 抓取大量免费代理 ip,提取有效 ip 使用
https://github.com/awolfly9/ipproxytool
ipproxy proxy python
Last synced: 6 days ago
JSON representation
python ip proxy tool scrapy crawl. 抓取大量免费代理 ip,提取有效 ip 使用
- Host: GitHub
- URL: https://github.com/awolfly9/ipproxytool
- Owner: awolfly9
- License: mit
- Created: 2016-12-05T12:52:21.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2022-12-08T07:42:07.000Z (about 2 years ago)
- Last Synced: 2024-12-07T07:05:08.302Z (6 days ago)
- Topics: ipproxy, proxy, python
- Language: Python
- Homepage:
- Size: 283 KB
- Stars: 1,983
- Watchers: 74
- Forks: 412
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-network-stuff - **1545**星
README
# IPProxyTool
使用 scrapy 爬虫抓取代理网站,获取大量的免费代理 ip。过滤出所有可用的 ip,存入数据库以备使用。
可以访问我的个人站点,查看我的更多有趣项目 [西瓜](http://xigua233.com/)感谢 [youngjeff](https://github.com/youngjeff) 和我一起维护该项目
## 运行环境
安装 python3 and mysql 数据库cryptography模块安装环境:
```
sudo yum install gcc libffi-devel python-devel openssl-devel
``````
$ pip install -r requirements.txt
```## 下载使用
将项目克隆到本地```
$ git clone https://github.com/awolfly9/IPProxyTool.git
```进入工程目录
```
$ cd IPProxyTool
```
修改 mysql 数据库配置 [config.py](https://github.com/awolfly9/IPProxyTool/blob/master/config.py) 中 database_config 的用户名和密码为数据库的用户名和密码```
$ vim config.py
---------------database_config = {
'host': 'localhost',
'port': 3306,
'user': 'root',
'password': '123456',
'charset': 'utf8',
}
```MYSQL: 导入数据表结构
```
$ mysql> create database ipproxy;
Query OK, 1 row affected (0.00 sec)
$ mysql> use ipproxy;
Database changed
$ mysql> source '/你的项目目录/db.sql'```
运行启动脚本 ipproxytool.py 也可以分别运行抓取,验证,服务器接口脚本,运行方法参考项目说明
```
$ python ipproxytool.py
```新增异步验证方式,运行方法如下
```
$ python ipproxytool.py async
```## 项目说明
#### 抓取代理网站
所有抓取代理网站的代码都在 [proxy](https://github.com/awolfly9/IPProxyTool/tree/master/ipproxytool/spiders/proxy)
##### 扩展抓取其他的代理网站
1.在 proxy 目录下新建脚本并继承自 BaseSpider
2.设置 name、urls、headers
3.重写 parse_page 方法,提取代理数据
4.将数据存入数据库 具体可以参考 [ip181](https://github.com/awolfly9/IPProxyTool/blob/master/ipproxytool/spiders/proxy/ip181.py) [kuaidaili](https://github.com/awolfly9/IPProxyTool/blob/master/ipproxytool/spiders/proxy/kuaidaili.py)
5.如果需要抓取特别复杂的代理网站,可以参考[peuland](https://github.com/awolfly9/IPProxyTool/blob/master/ipproxytool/spiders/proxy/peuland.py)##### 修改 run_crawl_proxy.py 导入抓取库,添加到抓取队列
可以单独运行 run_crawl_proxy.py 脚本开始抓取代理网站
```
$ python run_crawl_proxy.py
```#### 验证代理 ip 是否有效
目前验证方式:
1.从上一步抓取并存储的数据库中取出所有的代理 IP
2.利用取出的代理 IP 去请求 [httpbin](http://httpbin.org/get?show_env=1)
3.根据请求结果判断出代理 IP 的有效性,是否支持 HTTPS 以及匿名度,并存储到表 httpbin 中
4.从 httpbin 表中取出代理去访问目标网站,例如 [豆瓣](https://www.douban.com/)
5.如果请求在合适的时间返回成功的数据,则认为这个代理 IP 有效。并且存入相应的表中一个目标网站对应一个脚本,所有验证代理 ip 的代码都在 [validator](https://github.com/awolfly9/IPProxyTool/tree/master/ipproxytool/spiders/validator)
##### 扩展验证其他网站
1.在 validator 目录下新建脚本并继承 Validator
2.设置 name、timeout、urls、headers
3.然后调用 init 方法,可以参考 [baidu](https://github.com/awolfly9/IPProxyTool/blob/master/ipproxytool/spiders/validator/baidu.py) [douban](https://github.com/awolfly9/IPProxyTool/blob/master/ipproxytool/spiders/validator/douban.py)
4.如果需要特别复杂的验证方式,可以参考 [assetstore](https://github.com/awolfly9/IPProxyTool/blob/master/ipproxytool/spiders/validator/assetstore.py)
##### 修改 run_validator.py 导入验证库,添加到验证队列
可以单独运行 run_validator.py 开始验证代理ip的有效性```
$ python run_validator.py
```### 获取代理 ip 数据服务器接口
在 config.py 中修改启动服务器端口配置 data_port,默认为 8000
启动服务器```
$ python run_server.py
```服务器提供接口
#### 获取参数
| 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 | 否 |#### 删除
参数
| Name | Type | Description | 是否必须|
| ----| ---- | ---- | --- |
| name | str | 数据库名称 | 是 |
| ip | str | 需要删除的 ip | 是 |#### 插入
参数
| 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
* 添加多数据库支持
* mysql
* redis TODO...
* sqlite TODO...
* 添加抓取更多免费代理网站,目前支持的抓取的免费代理 IP 站点,目前有一些国外的站点连接不稳定
* (国外)
* (国外)
* (国内)
* (国内)
* (国内)
* (国外)
* (国外)
* (国内)
* (国外)
* (国内)
* 分布式部署项目
* ~~添加服务器获取接口更多筛选条件~~
* ~~多进程验证代理 IP~~
* ~~添加 https 支持~~
* ~~添加检测 ip 的匿名度~~## 参考
* [IPProxyPool](https://github.com/qiyeboy/IPProxyPool)## 项目更新
-----------------------------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就可以使用本程序:
下载本程序
```
git clone https://github.com/awolfly9/IPProxyTool
```然后进入目录:
```
cd IPProxyTool
```创建镜像:
```
docker build -t proxy .
```运行容器:
```
docker run -it proxy
```## 在config.py中按照自己的需求修改配置信息
```
database_config = {
'host': 'localhost',
'port': 3306,
'user': 'root',
'password': 'root',
'charset': 'utf8',
}
```