check.py 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. # -*- coding: utf-8 -*-
  2. """
  3. -------------------------------------------------
  4. File Name: check
  5. Description :
  6. Author : JHao
  7. date: 2019/8/6
  8. -------------------------------------------------
  9. Change Activity:
  10. 2019/8/6:
  11. -------------------------------------------------
  12. """
  13. __author__ = 'JHao'
  14. from threading import Thread
  15. from datetime import datetime
  16. from util.six import Queue, Empty
  17. from helper.proxy import Proxy
  18. from util.validators import validators
  19. from handler.logHandler import LogHandler
  20. from handler.proxyHandler import ProxyHandler
  21. def proxyCheck(proxy_obj):
  22. """
  23. 检测代理是否可用
  24. :param proxy_obj: Proxy object
  25. :return: Proxy object, status
  26. """
  27. def __proxyCheck(proxy):
  28. for func in validators:
  29. if not func(proxy):
  30. return False
  31. return True
  32. if __proxyCheck(proxy_obj.proxy):
  33. # 检测通过 更新proxy属性
  34. proxy_obj.check_count += 1
  35. proxy_obj.last_status = 1
  36. proxy_obj.last_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  37. if proxy_obj.fail_count > 0:
  38. proxy_obj.fail_count -= 1
  39. return proxy_obj
  40. else:
  41. proxy_obj.check_count += 1
  42. proxy_obj.last_status = 0
  43. proxy_obj.last_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  44. proxy_obj.fail_count += 1
  45. return proxy_obj
  46. class ProxyCheck(Thread):
  47. def __init__(self, check_type, queue, thread_name):
  48. Thread.__init__(self, name=thread_name)
  49. self.type = check_type
  50. self.log = LogHandler(self.name)
  51. self.proxy_handler = ProxyHandler()
  52. self.queue = queue
  53. def run(self):
  54. self.log.info("ProxyCheck - {} : start".format(self.name))
  55. while True:
  56. try:
  57. proxy_json = self.queue.get(block=False)
  58. except Empty:
  59. self.log.info("ProxyCheck - {} : exit".format(self.name))
  60. break
  61. proxy = Proxy.newProxyFromJson(proxy_json)
  62. proxy = proxyCheck(proxy)
  63. if self.type == "raw":
  64. if proxy.last_status:
  65. if self.proxy_handler.exists(proxy_obj.proxy):
  66. self.log.info('RawProxyCheck - {} : {} validation exists'.format(self.name,
  67. proxy_obj.proxy.ljust(20)))
  68. else:
  69. self.db.put(proxy_obj)
  70. self.log.info(
  71. 'RawProxyCheck - {} : {} validation pass'.format(self.name, proxy_obj.proxy.ljust(20)))
  72. else:
  73. self.log.info('RawProxyCheck - {} : {} validation fail'.format(self.name, proxy_obj.proxy.ljust(20)))
  74. self.queue.task_done()