ProxyManager.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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 Util.LogHandler import LogHandler
  18. from ProxyGetter.getFreeProxy import GetFreeProxy
  19. class ProxyManager(object):
  20. """
  21. ProxyManager
  22. """
  23. def __init__(self):
  24. self.db = DbClient()
  25. self.config = GetConfig()
  26. self.raw_proxy_queue = 'raw_proxy'
  27. self.log = LogHandler('proxy_manager')
  28. self.useful_proxy_queue = 'useful_proxy'
  29. def refresh(self):
  30. """
  31. fetch proxy into Db by ProxyGetter
  32. :return:
  33. """
  34. for proxyGetter in self.config.proxy_getter_functions:
  35. proxy_set = set()
  36. # fetch raw proxy
  37. for proxy in getattr(GetFreeProxy, proxyGetter.strip())():
  38. if proxy:
  39. self.log.info('{func}: fetch proxy {proxy}'.format(func=proxyGetter, proxy=proxy))
  40. proxy_set.add(proxy.strip())
  41. # store raw proxy
  42. self.db.changeTable(self.raw_proxy_queue)
  43. for proxy in proxy_set:
  44. self.db.put(proxy)
  45. def get(self):
  46. """
  47. return a useful proxy
  48. :return:
  49. """
  50. self.db.changeTable(self.useful_proxy_queue)
  51. return self.db.get()
  52. # return self.db.pop()
  53. def delete(self, proxy):
  54. """
  55. delete proxy from pool
  56. :param proxy:
  57. :return:
  58. """
  59. self.db.changeTable(self.useful_proxy_queue)
  60. self.db.delete(proxy)
  61. def getAll(self):
  62. """
  63. get all proxy from pool
  64. :return:
  65. """
  66. self.db.changeTable(self.useful_proxy_queue)
  67. return self.db.getAll()
  68. def get_status(self):
  69. # TODO rename get_count..
  70. self.db.changeTable(self.raw_proxy_queue)
  71. total_raw_proxy = self.db.get_status()
  72. self.db.changeTable(self.useful_proxy_queue)
  73. total_useful_queue = self.db.get_status()
  74. return {'raw_proxy': total_raw_proxy, 'useful_proxy': total_useful_queue}
  75. if __name__ == '__main__':
  76. pp = ProxyManager()
  77. pp.refresh()
  78. print(pp.get_status())