utilFunction.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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. from lxml import etree
  16. from Util.WebRequest import WebRequest
  17. def robustCrawl(func):
  18. def decorate(*args, **kwargs):
  19. try:
  20. return func(*args, **kwargs)
  21. except Exception as e:
  22. pass
  23. # logger.info(u"sorry, 抓取出错。错误原因:")
  24. # logger.info(e)
  25. return decorate
  26. def verifyProxyFormat(proxy):
  27. """
  28. 检查代理格式
  29. :param proxy:
  30. :return:
  31. """
  32. import re
  33. verify_regex = r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,5}"
  34. _proxy = re.findall(verify_regex, proxy)
  35. return True if len(_proxy) == 1 and _proxy[0] == proxy else False
  36. def getHtmlTree(url, **kwargs):
  37. """
  38. 获取html树
  39. :param url:
  40. :param kwargs:
  41. :return:
  42. """
  43. header = {'Connection': 'keep-alive',
  44. 'Cache-Control': 'max-age=0',
  45. 'Upgrade-Insecure-Requests': '1',
  46. 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko)',
  47. 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
  48. 'Accept-Encoding': 'gzip, deflate, sdch',
  49. 'Accept-Language': 'zh-CN,zh;q=0.8',
  50. }
  51. # TODO 取代理服务器用代理服务器访问
  52. wr = WebRequest()
  53. html = wr.get(url=url, header=header).content
  54. return etree.HTML(html)
  55. def tcpConnect(proxy):
  56. """
  57. TCP 三次握手
  58. :param proxy:
  59. :return:
  60. """
  61. from socket import socket, AF_INET, SOCK_STREAM
  62. s = socket(AF_INET, SOCK_STREAM)
  63. ip, port = proxy.split(':')
  64. result = s.connect_ex((ip, int(port)))
  65. return True if result == 0 else False
  66. def validUsefulProxy(proxy):
  67. """
  68. 检验代理是否可用
  69. :param proxy:
  70. :return:
  71. """
  72. if isinstance(proxy, bytes):
  73. proxy = proxy.decode("utf8")
  74. proxies = {"http": "http://{proxy}".format(proxy=proxy)}
  75. try:
  76. r = requests.get('http://www.baidu.com', proxies=proxies, timeout=10, verify=False)
  77. if r.status_code == 200:
  78. return True
  79. except Exception as e:
  80. pass
  81. return False