getFreeProxy.py 3.1 KB

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