Python爬蟲之ip代理池

來源:互聯網
上載者:User

標籤:view   opened   splay   load   5.0   ip代理   python爬蟲   request   分享   

 

    可能在學習爬蟲的時候,遇到很多的反爬的手段,封ip 就是其中之一。

    對於封IP的網站。需要很多的代理IP,去買代理IP,對於初學者覺得沒有必要,每個賣代理IP的網站有的提供了免費IP,可是又很少,寫了個IP代理池 。學習應該就夠了

    ip代理池:

1,在各大網站爬去免費代理ip
2,檢查ip可用 可用存入資料庫1和2
3,在資料庫1中拿出少量代理ip存入資料庫2(方便維護)
4,定時檢查資料庫1和資料庫2的代理數量,以及是否可用
5,調用連接埠

1,在各大網站爬去免費代理ip

 1 def IPList_61(): 2   for q in [1,2]: 3       url=‘http://www.66ip.cn/‘+str(q)+‘.html‘ 4       html=Requestdef.get_page(url) 5       if html!=None: 6           #print(html) 7           iplist=BeautifulSoup(html,‘lxml‘) 8           iplist=iplist.find_all(‘tr‘) 9           i=210           for ip in iplist:11              if i<=0:12                  loader=‘‘13                  #print(ip)14                  j=015                  for ipport in ip.find_all(‘td‘,limit=2):16                      if j==0:17                         loader+=ipport.text.strip()+‘:‘18                      else:19                          loader+=ipport.text.strip()20                      j=j+121                  Requestdef.inspect_ip(loader)22              i=i-123       time.sleep(1)

多寫幾個這樣的方法

2,檢查ip可用 可用存入資料庫1,和2

3,在資料庫1中拿出少量代理ip存入資料庫2(方便維護)
 1 def inspect_ip(ipprot): 2     time.sleep(1) 3     herder={ 4         "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36", 5         ‘Accept-Encoding‘:‘gzip, deflate‘, 6         ‘Accept-Language‘:‘zh-CN,zh;q=0.9‘, 7         ‘Accept‘:‘text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8‘, 8         ‘Upgrade-Insecure-Requests‘:‘1‘ 9 10     }11 12     url=‘https://www.baidu.com‘13     proxies = { "http": "http://"+str(ipprot) }14     request=requests.get(url,headers=herder,proxies=proxies)15     if request.status_code==200:16         print(‘可用代理‘+ipprot)17         if Db.r.llen(‘Iplist‘)<=50:18            Db.add_ip(ipprot)19         #Alt.iplist.append(ipprot)20 21         else:22            Db.add_ips(ipprot)23     else:24         print(‘不可用代理‘+ipprot)
View Code

我這裡是用的www.baidu.com檢測的 給主IP的資料庫長度是50 (太多了不好維護)


4,定時檢查資料庫1和資料庫2的代理數量,以及是否可用


#檢查ip池數量def time_ip():    while True:        time.sleep(5)        Db.act_lenip()#檢查備用池數量def time_ips():    while True:        time.sleep(30)
#當備用池數量小於100 再次擷取 if Db.len_ips()<100: print(‘填資料‘) Acting_ip.iplist()#程式入口if __name__ == ‘__main__‘: t1=threading.Thread(target=time_ip) t1.start() t2=threading.Thread(target=time_ips) t2.start() t1.join() t2.join()

  給他2個線程  

Db.py

 1 #coding:utf-8 2 import redis 3 import Requestdef 4 r = redis.Redis(host=‘127.0.0.1‘, port=6379)#host後的IP是需要串連的ip,本地是127.0.0.1或者localhost 5 #主ip池 6 def add_ip(ip): 7      r.lpush(‘Iplist‘,ip) 8 #備用ip池 9 def add_ips(ip):10      r.lpush(‘Iplists‘,ip)11 #備用ip池第一個開始取出12 def app_ips():13      i=str(r.lindex(‘Iplists‘,1),encoding=‘utf-8‘)14      r.lrem(‘Iplists‘,i,num=0)15      return i16 def len_ips():17     return r.llen(‘Iplists‘)18 def len_ip():19     return r.llen(‘Iplist‘)20 #第一個開始取出21 def app_ip():22      i=str(r.lpop(‘Iplist‘),encoding=‘utf-8‘)23      return i24 #取出從最後一個開始25 def rem_ip():26     i=str(r.rpop(‘Iplist‘),encoding=‘utf-8‘)27     return i28 #檢查主ip池29 def act_db():30     for i in range(int(r.llen(‘Iplist‘)/2)):31        Requestdef.inspect_ip(rem_ip())32 33 #如果ip池數量少於25個 則填滿34 def act_lenip():35     if r.llen(‘Iplist‘)<25:36         print(‘填ip‘)37         while r.llen(‘Iplist‘)<=50:38           Requestdef.inspect_ip(app_ips())
Db.py

 


5,調用連接埠 使用flask庫建立介面
 1 from flask import Flask 2 import Db 3  4 app = Flask(__name__) 5  6 @app.route(‘/‘, methods=[‘GET‘]) 7 def home(): 8     return ‘What is?‘ 9 10 @app.route(‘/get‘, methods=[‘GET‘])11 def homsse():12     return Db.app_ip()13 #線程池數量14 @app.route(‘/count‘, methods=[‘GET‘])15 def homsssse():16     return str(Db.len_ip())17 app.run(debug=True)
API.PY

就完成了

 運行api

 

資料庫裡面的 Iplist為主Ip池 iplist 為備用ip池

 

 

 

用get調用 用一次就刪一個

小白代碼

Python爬蟲之ip代理池

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.