開源一個爬蟲代理框架:IPProxyTool
使用 scrapy 爬蟲抓取代理網站,獲取大量的免費代理 ip。過濾出所有可用的 ip,存入數據庫以備使用。
運行環境
python 2.7.12
運行依賴包
- scrapy
- BeautifulSoup
- requests
- mysql-connector-python
- web.py
- scrapydo
- lxml
Mysql 配置
- 安裝 Mysql 并啟動
- 安裝 mysql-connector-python 安裝參考
- 在 config.py 更改數據庫配置
database_config = {
'host': 'localhost',
'port': 3306,
'user': 'root',
'password': '123456',
}
下載使用
將項目克隆到本地
$ git clone https://github.com/awolfly9/IPProxyTool.git
進入工程目錄
$ cd IPProxyTool
分別運行代理抓取、驗證、服務器 腳本
$ 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 是否有效
目前驗證方式:利用將抓取到的代理 ip 設置成 scrapy 請求的代理,然后去請求目標網站,如果目標網站在合適的時間內成功返回,那么這個則認為這個代理 ip 有效。如果沒有在合適的時間返回成功的數據,則認為這個代理 ip 無效。
一個目標網站對應一個腳本,所有驗證代理 ip 的代碼都在 validator
擴展驗證其他網站
1.在 validator 目錄下新建腳本并繼承 Validator
2.設置 name、timeout、urls、headers
3.然后調用 init 方法
4.如果需要特別復雜的驗證方式,可以參考 assetstore
修改runvalidator.py 導入驗證庫,添加到驗證隊列
運行 runvalidator.py 腳本開始抓取代理網站
$ python runvalidator.py
獲取代理 ip 數據服務器
在 config.py 中修改啟動服務器端口配置 data_port,默認為 8000 啟動服務器
$ python runserver.py
服務器提供接口
獲取
http://127.0.0.1:8000/select?name=douban
參數
Name | Type | Description |
---|---|---|
name | str | 數據庫名稱 |
刪除
http://127.0.0.1:8000/delete?name=free_ipproxy&ip=27.197.144.181
參數
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
- 添加服務器獲取接口更多篩選條件
- 添加 https 支持
- 添加檢測 ip 的匿名度
- 添加抓取更多免費代理網站
- 分布式部署項目