ProxyManager.py 2.2 KB

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