getFreeProxy.py 3.2 KB

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