ProxyManager.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. # -*- coding: utf-8 -*-
  2. """
  3. -------------------------------------------------
  4. File Name: ProxyManager.py
  5. Description :
  6. Author : JHao
  7. date: 2016/12/3
  8. -------------------------------------------------
  9. Change Activity:
  10. 2016/12/3:
  11. -------------------------------------------------
  12. """
  13. __author__ = 'JHao'
  14. from DB.DbClient import DbClient
  15. from Util.GetConfig import GetConfig
  16. from ProxyGetter.GetFreeProxy import GetFreeProxy
  17. class ProxyManager(object):
  18. """
  19. ProxyManager
  20. """
  21. def __init__(self):
  22. self.db = DbClient()
  23. self.config = GetConfig()
  24. self.raw_proxy_queue = 'raw_proxy'
  25. self.useful_proxy_queue = 'useful_proxy_queue'
  26. def refresh(self):
  27. """
  28. fetch proxy into Db by ProxyGetter
  29. :return:
  30. """
  31. for proxyGetter in self.config.proxy_getter_functions:
  32. proxy_set = set()
  33. # fetch raw proxy
  34. for proxy in getattr(GetFreeProxy, proxyGetter.strip())():
  35. proxy_set.add(proxy)
  36. # store raw proxy
  37. self.db.changeTable(self.raw_proxy_queue)
  38. for proxy in proxy_set:
  39. self.db.put(proxy)
  40. def get(self):
  41. """
  42. return a useful proxy
  43. :return:
  44. """
  45. self.db.changeTable(self.useful_proxy_queue)
  46. return self.db.pop()
  47. def delete(self, proxy):
  48. """
  49. delete proxy from pool
  50. :param proxy:
  51. :return:
  52. """
  53. self.db.changeTable(self.useful_proxy_queue)
  54. self.db.delete(proxy)
  55. def getAll(self):
  56. """
  57. get all proxy from pool
  58. :return:
  59. """
  60. self.db.changeTable(self.useful_proxy_queue)
  61. return self.db.getAll()
  62. if __name__ == '__main__':
  63. pp = ProxyManager()
  64. pp.refresh()