ProxyManager.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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. if proxy.strip():
  37. proxy_set.add(proxy.strip())
  38. # store raw proxy
  39. self.db.changeTable(self.raw_proxy_queue)
  40. for proxy in proxy_set:
  41. self.db.put(proxy)
  42. def get(self):
  43. """
  44. return a useful proxy
  45. :return:
  46. """
  47. self.db.changeTable(self.useful_proxy_queue)
  48. return self.db.get()
  49. # return self.db.pop()
  50. def delete(self, proxy):
  51. """
  52. delete proxy from pool
  53. :param proxy:
  54. :return:
  55. """
  56. self.db.changeTable(self.useful_proxy_queue)
  57. self.db.delete(proxy)
  58. def getAll(self):
  59. """
  60. get all proxy from pool
  61. :return:
  62. """
  63. self.db.changeTable(self.useful_proxy_queue)
  64. return self.db.getAll()
  65. def get_status(self):
  66. self.db.changeTable(self.raw_proxy_queue)
  67. quan_raw_proxy = self.db.get_status()
  68. self.db.changeTable(self.useful_proxy_queue)
  69. quan_useful_queue = self.db.get_status()
  70. return {'raw_proxy': quan_raw_proxy, 'useful_proxy_queue': quan_useful_queue}
  71. if __name__ == '__main__':
  72. pp = ProxyManager()
  73. # pp.refresh()
  74. print pp.get_status()