ProxyRefreshSchedule.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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. 2017/04/26: raw_proxy_queue验证通过但useful_proxy_queue中已经存在的代理不在放入
  14. -------------------------------------------------
  15. """
  16. import sys
  17. import time
  18. from threading import Thread
  19. from apscheduler.schedulers.blocking import BlockingScheduler
  20. sys.path.append('../')
  21. from Util.utilFunction import validUsefulProxy
  22. from Manager.ProxyManager import ProxyManager
  23. from Util.LogHandler import LogHandler
  24. __author__ = 'JHao'
  25. class ProxyRefreshSchedule(ProxyManager):
  26. """
  27. 代理定时刷新
  28. """
  29. def __init__(self):
  30. ProxyManager.__init__(self)
  31. self.log = LogHandler('refresh_schedule')
  32. def validProxy(self):
  33. """
  34. 验证raw_proxy_queue中的代理, 将可用的代理放入useful_proxy_queue
  35. :return:
  36. """
  37. self.db.changeTable(self.raw_proxy_queue)
  38. raw_proxy = self.db.pop()
  39. self.log.info('%s start validProxy_a' % time.ctime())
  40. exist_proxy = self.db.getAll()
  41. while raw_proxy:
  42. if validUsefulProxy(raw_proxy) and (raw_proxy not in exist_proxy):
  43. self.db.changeTable(self.useful_proxy_queue)
  44. self.db.put(raw_proxy)
  45. self.log.info('validProxy_a: %s validation pass' % raw_proxy)
  46. else:
  47. self.log.debug('validProxy_a: %s validation fail' % raw_proxy)
  48. self.db.changeTable(self.raw_proxy_queue)
  49. raw_proxy = self.db.pop()
  50. self.log.info('%s validProxy_a complete' % time.ctime())
  51. def refreshPool():
  52. pp = ProxyRefreshSchedule()
  53. pp.validProxy()
  54. def main(process_num=30):
  55. p = ProxyRefreshSchedule()
  56. # 获取新代理
  57. p.refresh()
  58. # 检验新代理
  59. pl = []
  60. for num in range(process_num):
  61. proc = Thread(target=refreshPool, args=())
  62. pl.append(proc)
  63. for num in range(process_num):
  64. pl[num].start()
  65. for num in range(process_num):
  66. pl[num].join()
  67. def run():
  68. # main()
  69. sched = BlockingScheduler()
  70. sched.add_job(main, 'interval', minutes=10)
  71. sched.start()
  72. if __name__ == '__main__':
  73. run()