免費代理IP池

免費代理IP池

高頻抓取某個網站的數據,很有可能就被網站管理員封掉IP,導致抓取數據失敗,解決這個問題最直接,簡單的方法就是使用代理IP。目前網上有不少提供付費代理IP的平臺,但是如需長期使用,該方案是筆不少的開銷。本項目通過抓取IP代理網站提供免費代理IP,並不間斷的驗證IP的有效性,根據代理IP驗證的歷史記錄對IP進行評估,輸出高質量代理IP。
源碼:https://github.com/clelandgt/ip_proxy

功能

  • 100+ 支持https, 匿名或高匿名的免費代理IP;
  • 外部提供API調用。

原理

第一步:爬取多個免費IP代理網站獲得代理IP;
第二步:訪問https://www.baidu.com/驗證代理IP的有效性和響應時間,由於每次都能爬取10000+個代理,需要使用併發(多進程+協程)方式快速完成驗證;
第三步:將驗證通過的代理IP存入mongodb中;
第四步:睡眠一定時間;
第五步:開始驗證數據庫中的IP,根據每個IP的歷史失敗數和失敗率淘汰掉一些低質量或失效的代理IP;
第六步:驗證完數據庫中的IP,如果數據庫中的IP小於一個預設值(比如100),執行第一步,否則執行第四步。
這裏寫圖片描述

部署

  • os:Centos7
  • redis 2.8.19
  • mongodb 3.4.1
  • nginx 1.10.2

完成以上系統和軟件的安裝,其中操作系統可以選擇其他linux版本,軟件版本沒有特殊要求。

克隆代碼到本地

$ git clone https://github.com/clelandgt/ip_proxy

創建虛擬環境

$ mkvirtualenv proxy_env #創建名爲proxy_env的虛擬環境
$ workon proxy_env #加載proxy_env虛擬環境
$ pip install -r requirements.txt #導入並安裝需要安裝的第三方庫

關於虛擬環境的詳細介紹和使用詳見:http://blog.csdn.net/ganzheyu/article/details/53014726

supervisord

使用supervisord進行進程管理,當進程出現異常退出時,supervisord會重新啓動該進程。

$ pip install supervisor #安裝supervisord
$ mv supervisord.conf /etc/supervisord.conf #默認配置文件在/etc下,所以將項目配置好的deploy目錄下的supervisord.conf拷貝到/etc下。

本項目需要監控的進程主要有兩個,一個是IP代理核心流程”python ip_proxy.py”,另一個是提供外部API訪問的”uwsgi uwsgi.ini”

[program:proxy_crawler]
command=python ip_proxy.py
directory=/root/webapp/ip_proxy/src/ip_proxy
autostart=true
autorestart=true
stdout_logfile=/tmp/proxy_crawler.log

[program:uwsgi]
command=uwsgi uwsgi.ini
directory=/root/webapp/ip_proxy/src
autostart=true
autorestart=true 

nginx + uwsgi 配置後臺服務

...

設置開機自啓

$ systemctl enabled supervisord.service #設置supervisord開機自啓
$ systemctl enabled redis.service #設置redis開機自啓
$ systemctl enabled mongod.service #設置mongodb開機自啓
$ systemctl enabled nginx.service #設置nginx開機自啓

關於systemctl詳細使用見:http://blog.csdn.net/ganzheyu/article/details/56335419

- 虛擬環境的加載
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章