ProxyRefreshSchedule.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. # -*- coding: utf-8 -*-
  2. # !/usr/bin/env python
  3. """
  4. -------------------------------------------------
  5. File Name: ProxyRefreshSchedule.py
  6. Description : 代理定时刷新
  7. Author : JHao
  8. date: 2016/12/4
  9. -------------------------------------------------
  10. Change Activity:
  11. 2016/12/4: 代理定时刷新
  12. 2017/03/06: 使用LogHandler添加日志
  13. -------------------------------------------------
  14. """
  15. import sys
  16. import time
  17. from threading import Thread
  18. from apscheduler.schedulers.blocking import BlockingScheduler
  19. sys.path.append('../')
  20. from Util.utilFunction import validUsefulProxy
  21. from Manager.ProxyManager import ProxyManager
  22. from Util.LogHandler import LogHandler
  23. __author__ = 'JHao'
  24. class ProxyRefreshSchedule(ProxyManager):
  25. """
  26. 代理定时刷新
  27. """
  28. def __init__(self):
  29. ProxyManager.__init__(self)
  30. self.log = LogHandler('refresh_schedule')
  31. def validProxy(self):
  32. """
  33. 验证raw_proxy_queue中的代理, 将可用的代理放入useful_proxy_queue
  34. :return:
  35. """
  36. self.db.changeTable(self.raw_proxy_queue)
  37. raw_proxy = self.db.pop()
  38. self.log.info('%s start validProxy_a' % time.ctime())
  39. while raw_proxy:
  40. if validUsefulProxy(raw_proxy):
  41. self.db.changeTable(self.useful_proxy_queue)
  42. self.db.put(raw_proxy)
  43. self.log.info('validProxy_a: %s validation pass' % raw_proxy)
  44. else:
  45. self.log.debug('validProxy_a: %s validation fail' % raw_proxy)
  46. self.db.changeTable(self.raw_proxy_queue)
  47. raw_proxy = self.db.pop()
  48. self.log.info('%s validProxy_a complete' % time.ctime())
  49. def refreshPool():
  50. pp = ProxyRefreshSchedule()
  51. pp.validProxy()
  52. def main(process_num=30):
  53. p = ProxyRefreshSchedule()
  54. # 获取新代理
  55. p.refresh()
  56. # 检验新代理
  57. pl = []
  58. for num in range(process_num):
  59. proc = Thread(target=refreshPool, args=())
  60. pl.append(proc)
  61. for num in range(process_num):
  62. pl[num].start()
  63. for num in range(process_num):
  64. pl[num].join()
  65. def run():
  66. # main()
  67. sched = BlockingScheduler()
  68. sched.add_job(main, 'interval', minutes=10)
  69. sched.start()
  70. if __name__ == '__main__':
  71. run()