getFreeProxy.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. # -*- coding: utf-8 -*-
  2. # !/usr/bin/env python
  3. """
  4. -------------------------------------------------
  5. File Name: GetFreeProxy.py
  6. Description : 抓取免费代理
  7. Author : JHao
  8. date: 2016/11/25
  9. -------------------------------------------------
  10. Change Activity:
  11. 2016/11/25:
  12. -------------------------------------------------
  13. """
  14. import re
  15. import sys
  16. import requests
  17. reload(sys)
  18. sys.setdefaultencoding('utf-8')
  19. from Util.utilFunction import robustCrawl, getHtmlTree
  20. # for debug to disable insecureWarning
  21. requests.packages.urllib3.disable_warnings()
  22. class GetFreeProxy(object):
  23. """
  24. proxy getter
  25. """
  26. def __init__(self):
  27. pass
  28. @staticmethod
  29. @robustCrawl
  30. def freeProxyFirst(page=10):
  31. """
  32. 抓取快代理IP http://www.kuaidaili.com/
  33. :param page: 翻页数
  34. :return:
  35. """
  36. url_list = ('http://www.kuaidaili.com/proxylist/{page}/'.format(page=page) for page in range(1, page + 1))
  37. # 页数不用太多, 后面的全是历史IP, 可用性不高
  38. for url in url_list:
  39. tree = getHtmlTree(url)
  40. proxy_list = tree.xpath('.//div[@id="index_free_list"]//tbody/tr')
  41. for proxy in proxy_list:
  42. yield ':'.join(proxy.xpath('./td/text()')[0:2])
  43. print 'finish kuaidaili fetching proxy ip'
  44. @staticmethod
  45. @robustCrawl
  46. def freeProxySecond(proxy_number=100):
  47. """
  48. 抓取代理66 http://www.66ip.cn/
  49. :param proxy_number: 代理数量
  50. :return:
  51. """
  52. url = "http://m.66ip.cn/mo.php?sxb=&tqsl={}&port=&export=&ktip=&sxa=&submit=%CC%E1++%C8%A1&textarea=".format(
  53. proxy_number)
  54. html = requests.get(url).content
  55. for proxy in re.findall(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,5}', html):
  56. yield proxy
  57. print 'finish 66ip fetching proxy ip'
  58. @staticmethod
  59. @robustCrawl
  60. def freeProxyThird(days=1):
  61. """
  62. 抓取有代理 http://www.youdaili.net/Daili/http/
  63. :param days:
  64. :return:
  65. """
  66. url = "http://www.youdaili.net/Daili/http/"
  67. tree = getHtmlTree(url)
  68. page_url_list = tree.xpath('.//div[@class="chunlist"]/ul//a/@href')[0:days]
  69. for page_url in page_url_list:
  70. html = requests.get(page_url).content
  71. proxy_list = re.findall(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,5}', html)
  72. for proxy in proxy_list:
  73. yield proxy
  74. print 'finish youdaili fetching proxy ip'
  75. @staticmethod
  76. @robustCrawl
  77. def freeProxyFourth():
  78. """
  79. 抓取西刺代理 http://api.xicidaili.com/free2016.txt
  80. :return:
  81. """
  82. url = "http://api.xicidaili.com/free2016.txt"
  83. html = requests.get(url).content
  84. for proxy in re.findall(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,5}', html):
  85. yield proxy
  86. print 'finish xici fetching proxy ip'
  87. @staticmethod
  88. @robustCrawl
  89. def freeProxyFifth():
  90. """
  91. 抓取guobanjia http://www.goubanjia.com/free/gngn/index.shtml
  92. :return:
  93. """
  94. url = "http://www.goubanjia.com/free/gngn/index.shtml"
  95. tree = getHtmlTree(url)
  96. # 现在每天最多放15个(一页)
  97. for i in xrange(15):
  98. d = tree.xpath('.//table[@class="table"]/tbody/tr[{}]/td'.format(i + 1))[0]
  99. o = d.xpath('.//span/text() | .//div/text()')
  100. yield ''.join(o[:-1]) + ':' + o[-1]
  101. print 'finish guobanjia fetching proxy ip'
  102. if __name__ == '__main__':
  103. gg = GetFreeProxy()
  104. for e in gg.freeProxyFifth():
  105. print e