python 高度健壮性爬虫的异常和超时问题
来源:互联网 发布:男生不喜欢女生 知乎 编辑:程序博客网 时间:2024/06/11 23:20
爬虫这类型程序典型特征是意外多,无法确保每次请求都是稳定的返回统一的结果,要提高健壮性,能对错误数据or超时or程序死锁等都能进行处理,才能确保程序几个月不停止。本项目乃长期维护github:反反爬虫开源库中积累下来,更多干货欢迎star。
目录:
- 一:基础try&except异常处理
- 二:普通请求函数的超时处理
- 三:selenium+chrome | phantomjs 的超时处理
- 四:自定义函数的死锁or超时处理
- 五:自定义线程的死锁or超时处理
- 六:自重启的程序设计
一:基础try&except异常处理
try&except的语句作用不仅仅是要让其捕获异常更重要的是让其忽略异常,因为爬虫中的绝大多数异常可能重新请求就不存在,因此,发现异常的时候将其任务队列进行修复其实是个最省力的好办法。
其次被try包住的语句即使出错也不会导致整个程序的退出,相信我,你绝对不希望计划跑一个周末的程序在半夜停止了。
二:请求函数的超时处理
2.1:普通请求:
2.1.1单请求类型:
三:selenium+chrome | phantomjs 的超时处理
2.2.1:selenium+chrome的超时设置
官网原文:http://selenium-python.readthedocs.io/waits.html
显式等待:、等待某个条件发生,然后再继续进行代码。
隐式等待:是告诉WebDriver在尝试查找一个或多个元素(如果它们不是立即可用的)时轮询DOM一定时间。默认设置为0,一旦设置,将为WebDriver对象实例的生命期设置隐式等待。
2.2.2:phantomjs的超时设置
这里使用不带selenium的phantomjs,需要使用js。主要设置语句是
四:自定义函数的死锁or超时处理
这个非常重要!!
python是顺序执行的,但是如果下一句话可能导致死锁(比如一个while(1))那么如何强制让他超时呢?他本身如果没有带有超时设置的话,就要自己运行信号(import signal)来处理
五:自定义线程的死锁or超时处理
在某个程序中一方面不适合使用selenium+phantomjs的方式(要实现的功能比较难不适合)因为只能用原生的phantomjs,但是这个问题他本身在极端情况下也有可能停止(在超时设置之前因为某些错误)
那么最佳方案就是用python单独开一个线程(进程)调用原生phantomjs,然后对这个线程进程进行超时控制。
这里用ping这个命令先做测试,
六:自重启的程序设计
比如程序在某种情况下报错多次,,那么满足条件后,让其重启即可解决大多数问题,当然这只不过是治标不治本而已,如果这个程序重启没有大问题(例如读队列类型)那么自重启这是最省力的方式之一。
- python 高度健壮性爬虫的异常和超时问题
- python爬虫超时的处理
- python爬虫超时的处理
- 程序健壮性: 正常、错误和异常
- Python爬虫之超时设置
- 程序的健壮性和鲁棒性
- 程序的健壮性和鲁棒性
- python爬虫-异常处理
- [Python]网络爬虫(三):异常的处理和HTTP状态码的分类
- [Python]网络爬虫(三):异常的处理和HTTP状态码的分类
- [Python]网络爬虫(三):异常的处理和HTTP状态码的分类
- [Python]网络爬虫(三):异常的处理和HTTP状态码的分类
- [Python]网络爬虫(三):异常的处理和HTTP状态码的分类
- [Python]网络爬虫(三):异常的处理和HTTP状态码的分类
- [Python]网络爬虫(三):异常的处理和HTTP状态码的分类
- [Python]网络爬虫(三):异常的处理和HTTP状态码的分类
- python 爬虫(2)异常的处理和HTTP状态码的分类
- [Python]网络爬虫(三):异常的处理和HTTP状态码的分类
- tensorflow API:tf.Variable
- 点击编辑 弹出弹框(iframe)
- docker centos 使用 systemctl Failed to get D-Bus connection: Operation not permitted
- J2EE相关概念
- 土豪向往技术宅,迪拜欲成中东的区块链老大
- python 高度健壮性爬虫的异常和超时问题
- PHP关于时间的时间戳
- 利用某网站注册短信验证码漏洞,抓包改包实现短信轰炸骚扰
- Android 定时任务刷新的多种实现方式
- iOS真机调试出错解决方法
- 在redis使用过程遇到的一些问题的总结
- 做机械臂导航时遇到的问题7:正向运动学求解:在关节空间进行规划
- spring boot 框架处理spring data jpa的session
- mysql表连接 left join