utilFunction.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. # -*- coding: utf-8 -*-
  2. # !/usr/bin/env python
  3. """
  4. -------------------------------------------------
  5. File Name: utilFunction.py
  6. Description : tool function
  7. Author : JHao
  8. date: 2016/11/25
  9. -------------------------------------------------
  10. Change Activity:
  11. 2016/11/25: 添加robustCrawl、verifyProxy、getHtmlTree
  12. -------------------------------------------------
  13. """
  14. import requests
  15. # noinspection PyPep8Naming
  16. def robustCrawl(func):
  17. def decorate(*args, **kwargs):
  18. try:
  19. return func(*args, **kwargs)
  20. except Exception as e:
  21. print u"sorry, 抓取出错。错误原因:"
  22. print e
  23. return decorate
  24. def verifyProxy(proxy):
  25. """
  26. 检查代理格式
  27. :param proxy:
  28. :return:
  29. """
  30. import re
  31. verify_regex = r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,5}"
  32. return True if re.findall(verify_regex, proxy) else False
  33. def getHtmlTree(url, **kwargs):
  34. """
  35. 获取html树
  36. :param url:
  37. :param kwargs:
  38. :return:
  39. """
  40. import requests
  41. from lxml import etree
  42. header = {'Connection': 'keep-alive',
  43. 'Cache-Control': 'max-age=0',
  44. 'Upgrade-Insecure-Requests': '1',
  45. 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko)',
  46. 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
  47. 'Accept-Encoding': 'gzip, deflate, sdch',
  48. 'Accept-Language': 'zh-CN,zh;q=0.8',
  49. }
  50. html = requests.get(url=url, headers=header, timeout=30).content
  51. return etree.HTML(html)
  52. def validUsefulProxy(proxy):
  53. """
  54. 检验代理可以性
  55. :param proxy:
  56. :return:
  57. """
  58. proxies = {"http": "http://{proxy}".format(proxy=proxy),
  59. "https": "https://{proxy}".format(proxy=proxy)}
  60. try:
  61. # 超过30秒的代理就不要了
  62. r = requests.get('https://www.baidu.com/', proxies=proxies, timeout=30, verify=False)
  63. if r.status_code == 200:
  64. return True
  65. except Exception, e:
  66. return False