IPProxyTool
使用 scrapy 爬蟲抓取代理網站,獲取大量的免費代理 ip。過濾出所有可用的 ip,存入數據庫以備使用。
可以訪問我的個人站點,查看我的更多有趣項目 awolfly9
個人項目歡迎加微信吐槽
如果在使用中有任何疑問,或者項目中有任何槽點你覺得不滿意都可以加我微信向我吐槽。不吐不快~
運行環境
python 2.7.12
運行依賴包
scrapy
BeautifulSoup
requests
pymysql
web.py
scrapydo
lxml
安裝 mysql 并啟動
安裝命令:
$ pip install Scrapy BeautifulSoup requests pymysql web.py scrapydo lxml
下載使用
將項目克隆到本地
$ 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',
'charset': 'utf8',
}
運行啟動腳本 ipproxytool.py 也可以分別運行抓取,驗證,服務器接口腳本,運行方法參考項目說明
$ python ipproxytool.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 開始驗證代理ip的有效性
$ python runvalidator.py
獲取代理 ip 數據服務器接口
在 config.py 中修改啟動服務器端口配置 data_port,默認為 8000
啟動服務器
$ python runserver.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
參考
項目更新
-----------------------------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