84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
谢天谢地我刚刚找到了解决方案
用python爬虫抓站的一些技巧总结 - Python - 伯乐在线http://python.jobbole.com/81997/ 原文在这里
def request(url, cookie='xxx', retries=5): ret = urlparse.urlparse(url) # Parse input URL if ret.scheme == 'http': conn = httplib.HTTPConnection(ret.netloc) elif ret.scheme == 'https': conn = httplib.HTTPSConnection(ret.netloc) url = ret.path if ret.query: url += '?' + ret.query if ret.fragment: url += '#' + ret.fragment if not url: url = '/' try: conn.request(method='GET', url=url, headers={'Cookie': cookie}) res = conn.getresponse() except Exception, e: print e.message if retries > 0: return request(url=url, retries= retries - 1) else: print 'GET Failed' return '' else: pass finally: pass if res.status != 200: return None return res.read()
原理是用一个retries变量存储重试次数,然后每次异常处理的时候就递归本身并且将重试次数-1,判断如果重试次数小于0就直接return并且打出失败日志
递归调用自身进行retrycount来限制是一种最直接的方法。但是有个问题: 如果对方地址只是暂时失败,比如重启服务了。立马重试还是失败,重试5次的时间很短,当对方服务好了之后这个请求就已经过掉了,因为重试了5次
我用的机制是 重试五次,分别等待30s 1分钟 10分钟 30分钟 1个小时 如果还是失败就认为确实失败了。当然 这个用法是根据具体业务逻辑来做处理。不同的业务需求,对请求的要求也是不一样的。
谢天谢地我刚刚找到了解决方案
用python爬虫抓站的一些技巧总结 - Python - 伯乐在线http://python.jobbole.com/81997/ 原文在这里
原理是用一个retries变量存储重试次数,然后每次异常处理的时候就递归本身并且将重试次数-1,判断如果重试次数小于0就直接return并且打出失败日志
递归调用自身进行retrycount来限制是一种最直接的方法。
但是有个问题:
如果对方地址只是暂时失败,比如重启服务了。立马重试还是失败,重试5次的时间很短,当对方服务好了之后这个请求就已经过掉了,因为重试了5次
我用的机制是 重试五次,分别等待30s 1分钟 10分钟 30分钟 1个小时 如果还是失败就认为确实失败了。
当然 这个用法是根据具体业务逻辑来做处理。不同的业务需求,对请求的要求也是不一样的。