Skip to content

Commit

Permalink
修改 readme
Browse files Browse the repository at this point in the history
  • Loading branch information
lgq authored and lgq committed May 8, 2017
1 parent 1622ea3 commit 416dc2b
Showing 1 changed file with 46 additions and 54 deletions.
100 changes: 46 additions & 54 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,9 @@
# IPProxyTool
使用 scrapy 爬虫抓取代理网站,获取大量的免费代理 ip。过滤出所有可用的 ip,存入数据库以备使用。
可以访问我的个人站点,查看我的更多有趣项目 [awolfly9](http://awolfly9.com/)
## 开源 & 免费代理工具 IPProxyTool
使用 scrapy 爬虫抓取代理网站,获取大量的免费代理 ip。循环过滤出所有可用的 ip,存入数据库以供其他项目使用<br>
我目前开发的很多爬虫项目都用到了这个代理工具,稳定高效抓取大量数据必备神器。可以访问我的个人站点,查看我的更多有趣项目 [awolfly9](http://awolfly9.com/)

#### 个人项目欢迎加微信吐槽
![](weixin.png)
<br>
**如果在使用中有任何疑问,或者项目中有任何槽点你觉得不满意都可以加我微信向我吐槽。不吐不快~**

## 运行环境
python 2.7.12

### 运行依赖包
## 项目依赖
* python 2.7.12
* scrapy
* BeautifulSoup
* requests
Expand All @@ -26,9 +19,7 @@ python 2.7.12
$ pip install Scrapy BeautifulSoup requests pymysql web.py scrapydo lxml
```



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

```
Expand Down Expand Up @@ -56,7 +47,7 @@ database_config = {
```


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

```
$ python ipproxytool.py
Expand All @@ -65,40 +56,41 @@ $ python ipproxytool.py
**如果更新后运行报错,请先删除本地数据库。**
<br>

## 项目说明
#### 抓取代理网站
所有抓取代理网站的代码都在 [proxy](https://github.com/awolfly9/IPProxyTool/tree/master/ipproxytool/spiders/proxy)<br/>
##### 扩展抓取其他的代理网站
1.在 proxy 目录下新建脚本并继承自 BaseSpider <br/>
2.设置 name、urls、headers<br/>
3.重写 parse_page 方法,提取代理数据<br/>
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)<br/>
5.如果需要抓取特别复杂的代理网站,可以参考[peuland](https://github.com/awolfly9/IPProxyTool/blob/master/ipproxytool/spiders/proxy/peuland.py)<br/>

##### 修改 runspider.py 导入抓取库,添加到抓取队列
## 项目说明
### 抓取代理网站
所有抓取代理网站的代码都在 [proxy](https://github.com/awolfly9/IPProxyTool/tree/master/ipproxytool/spiders/proxy)<br>
#### 扩展抓取其他的代理网站
1.在 proxy 目录下新建脚本并继承自 BaseSpider
2.设置 name、urls、headers
3.重写 parse_page 方法,提取代理数据
4.将数据存入数据库 可以参考 ip181.py kuaidaili.py
5.如果需要抓取特别复杂的代理网站,可以参考 peuland.py
#### 修改 runspider.py 导入抓取库,添加到抓取队列

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

```
$ python runspider.py
```

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

一个目标网站对应一个脚本,所有验证代理 ip 的代码都在 [validator](https://github.com/awolfly9/IPProxyTool/tree/master/ipproxytool/spiders/validator)
##### 扩展验证其他网站
1.在 validator 目录下新建脚本并继承 Validator <br>
2.设置 name、timeout、urls、headers <br>
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)<br>
4.如果需要特别复杂的验证方式,可以参考 [assetstore](https://github.com/awolfly9/IPProxyTool/blob/master/ipproxytool/spiders/validator/assetstore.py)<br>
##### 修改runvalidator.py 导入验证库,添加到验证队列
可以单独运行 runvalidator.py 开始验证代理ip的有效性

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

```
$ python runvalidator.py
Expand All @@ -112,11 +104,12 @@ $ python runvalidator.py
$ python runserver.py
```

服务器提供接口
## 服务器提供接口
#### 获取
<http://127.0.0.1:8000/select?name=httpbin&anonymity=1&https=yes&order=id&sort=desc&count=100>
[http://127.0.0.1:8000/select?name=douban&anonymity=1&
https=yes&sort=speed&count=100](http://127.0.0.1:8000/select?name=douban&anonymity=1&https=yes&sort=speed&count=100)

参数
#### 参数

| Name | Type | Description | must |
| ---- | ---- | ---- | ---- |
Expand All @@ -131,20 +124,20 @@ $ python runserver.py


#### 删除
<http://127.0.0.1:8000/delete?name=httpbin&ip=27.197.144.181>

参数
[http://127.0.0.1:8000/delete?name=free_ipproxy&ip=27.197.144.181](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=httpbin&ip=555.22.22.55&port=335&country=%E4%B8%AD%E5%9B%BD&anonymity=1&https=yes&speed=5&source=100>

参数
[http://127.0.0.1:8000/insert?name=douban&ip=555.22.22.55&
port=335&country=china&anonymity=1&
https=yes&speed=5&source=100](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 | 数据库名称 ||
Expand All @@ -157,6 +150,7 @@ $ python runserver.py
| source | str | ip 来源 ||



## TODO
* 添加抓取更多免费代理网站,目前支持的抓取的免费代理 IP 站点,目前有一些国外的站点连接不稳定
* (国外) <http://www.freeproxylists.net/>
Expand All @@ -176,10 +170,6 @@ $ python runserver.py
* ~~添加检测 ip 的匿名度~~


## 参考
* [IPProxyPool](https://github.com/qiyeboy/IPProxyPool)


## 项目更新
-----------------------------2017-3-30----------------------------<br>
1.修改完善 readme<br>
Expand All @@ -198,6 +188,8 @@ $ python runserver.py
3.添加 httpbin 验证并发数设置,默认为 4


## 参考
* [IPProxyPool](https://github.com/qiyeboy/IPProxyPool)



Expand Down

0 comments on commit 416dc2b

Please sign in to comment.