ip_pool.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import random
  2. from threading import Timer
  3. import requests
  4. import re
  5. class Pool(object):
  6. def __init__(self, size=9999, timeout=300):
  7. # _proxy_/select123@api.ip3366.net
  8. # 7 days since 2016-3-24 20:17:46
  9. # 'http://api.ip3366.net/api/?key=20160324194713692&getnum=%s&anonymoustype=3' % size
  10. # 68778130@qq.com/s68778130@http://proxy.mimvp.com/
  11. # 30 days since 2016-3-28 16:29:50
  12. self.apis = ['http://proxy.mimvp.com/api/fetch.php?orderid=860160328155901330&num=500', 'http://www.66ip.cn/getzh.php?getzh=2016050519918&getnum=2500&isp=0&anonymoustype=3&start=&ports=&export=&ipaddress=&area=0&proxytype=2&api=https'];
  13. self.proxies = []
  14. self._refreshing = False
  15. self._refresh()
  16. # refresh once every 5 minutes
  17. timer = Timer(timeout, self._refresh)
  18. timer.start()
  19. def _refresh(self):
  20. if self._refreshing:
  21. return
  22. self._refreshing = True
  23. proxies = []
  24. for api in self.apis:
  25. try:
  26. r = requests.get(api)
  27. proxies.extend([line.strip() for line in re.split('\n|<br>', r.text) if len(line.strip()) > 0])
  28. except:
  29. None
  30. self.proxies = proxies
  31. print('init ip pool', len(self.proxies))
  32. self._refreshing = False
  33. def get(self):
  34. if len(self.proxies) > 0:
  35. return random.choice(self.proxies)
  36. self._refresh()
  37. return None
  38. def remove(self, value):
  39. try:
  40. self.proxies.remove(value)
  41. except:
  42. None
  43. if len(self.proxies) <= 0:
  44. self._refresh()