python爬虫程序自动结束-在linux下python爬虫进程发生异常时自动重启直至正常结束的方法...
之前在做爬虫的时候遇到一种情况,当网络情况不太好的时候,爬虫爬到的链接在urlopen时会因为无法正常连接而报URLError或者timeout的错误导致陈序报错而终止;但是这些错误在重新运行陈序后能够解决,因此为了避免重复手动重启程序的麻烦,就想写脚本来自动重启。
思路很简单:
1.首先脚本检测目标程序是否在运行。这里我们可以用pidof的返回值来判断。
2.如果脚本检测到程序尚未运行或程序运行出错,重启程序。这里需要用到linux的$?变量,该变量能返回上一次命令的运行状态。其中0为运行正常,其他均为运行报错。
3.如果程序正常运行结束,终止脚本
例如我们要自动运行名为web_crawler.py的脚本,那么可以写如下shell脚本:
#! /bin/bash
pidof web_crawler.py # 检测程序是否运行
while [ $? -ne 0 ] # 判断程序上次运行是否正常结束
do
echo "Process exits with errors! Restarting!"
python web_crawler.py #重启程序
done
echo "Process ends!"
PS1: 这只能处理网络状况不良引起连接出错的情况,通过重新尝试链接能够解决的。如果是遇到了由于网站被墙导致的链接错误,那么这个做法就很有问题了,因为无论你重复几次都无法打开链接。这种情况的解决方式要么是翻墙再运行爬虫,那么就是跳过被墙的链接——具体操作可以是用re匹配链接排除,也可以是用try在连接超时执行跳出操作。例如:
try:
res = urllib2.urlopen(rq, timeout=10) # use urllib2 package
except urllib2.URLError, e:
print "Timed out to connect to this URL"
return None
except socket.timeout: # use socket package
print "Time out!"
return None
PS2:这里我们实际爬的是stanford cs224d上的链接然后下载内容,由于有些链接(pdf文件或者html网页)不包含文件后缀,保存的时候会比较麻烦。但是如果链接是网页的话那么res.headers.getheader("Content-Type") # urllib2或者rq = requests.get(url);r.headers["content-type"] # requests返回内容包含"text/html",利用这一点我们就可以识别出网页链接进行保存。
参考:
python爬虫程序自动结束-在linux下python爬虫进程发生异常时自动重启直至正常结束的方法...相关推荐
- 在linux下python爬虫进程发生异常时自动重启直至正常结束的方法
在linux下python爬虫进程发生异常时自动重启直至正常结束的方法 参考文章: (1)在linux下python爬虫进程发生异常时自动重启直至正常结束的方法 (2)https://www.cnbl ...
- linux 父子进程结束,Linux下让父进程结束后,子进程自动结束
在多进程编程的时候,经常会遇到这样的情况.父进程创建了一堆子进程,当遇到错误或者操作失误的时候把父进程关闭了,但是子进程还在跑,不得不一个一个地杀死子进程,或者使用ps,grep,awk,kill来配 ...
- Linux下Python脚本自启动与定时任务详解
这篇文章主要给大家介绍了关于Linux下Python脚本自启动与定时任务的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用python具有一定的参考学习价值. 前言 最近同事问了一个关于P ...
- python脚本自动运行失败_Linux下Python脚本自启动和定时启动的详细步骤
一.Python开机自动运行 假如Python自启动脚本为 auto.py .那么用root权限编辑以下文件: sudo vim /etc/rc.local 如果没有 rc.local 请看 这篇文章 ...
- Linux下python安装升级详细步骤 | Python2 升级 Python3
Linux下python升级步骤 Python2 ->Python3 多数情况下,系统自动的Python版本是2.x 或者yum直接安装的也是2.x 但是,现在多数情况下建议使用3.x 那么如 ...
- libmysqld_dev linux,Linux下python玩转MySQLdb
(0)目录 Linux下python玩转MySQLdb 一:起因 (1)Linux下安装python的第三方模块 ---- MySQLdb,自己走了很多弯路,在此做一下总结,希望对于像我一样的初学者有 ...
- Linux下python的命令,linux下python相关命令
若本机已安装python2,尽量不要动现有的python2,额外安装python3即可. 1.安装python3.6(centos下安装python3自带pip和setuptools) # 安装依赖环 ...
- linux下python退出命令_Linux 下 Python按任意键退出方法
某天在群内有同学问到,在python下我用input或者raw_input都得输入完后回车才能获取到输入的值,那如何实现任意键退出暂停等功能呢,我当时也没有多想,因为接触python时间也不算长,主要 ...
- linux下载哪个python版本-修改linux下python的默认版本
linux下python版本默认为python2.7,下面将通过操作在linux系统下修改python的默认版本. 本文linux系统使用的是ubuntu19. 操作: 1.在shell下输入pyth ...
最新文章
- 紧急更新下降难度,《王者荣耀》绝悟 AI 难倒一片玩家
- s7edge出现android停止,三星S7 Edge升级安卓7.0出现了这个问题!
- Json模块dumps、loads、dump、load函数介绍
- 区块链基础设施纵览:基本框架原则——揭示存储、计算和通信元素
- 做领导应该注意的几个问题
- Spring 5 新特性:函数式Web框架
- HDU - 4292 Food(最大流+思维建边)
- UWP x:bind
- KDD走进阿里 数百专家聚集探讨产学研一体化
- java console输出_将java console的输出写入文件
- layui table数据修改的回显
- 安装centos后 启动mysqld显示mysqld: 未被识别的服务 解决方法
- 美国专家声讨物联网安全 面对攻击如纸糊
- 一分钟搞懂 分布式与集群
- 如何给REED3阅读器都opml文件
- 国内外sns源码搜集
- 华为P30 HL2ELLEM VER.A手机图纸
- DelayQueue
- 第11章 枚举与泛型
- 问题解决:nvcc fatal : Unsupported gpu architecture ‘compute_75‘
热门文章
- 1065. 单身狗(25)
- 七夕秀恩爱新姿势!这波操作我给十分!
- java 构造器(constructor)
- 潭州课堂25班:Ph201805201 爬虫基础 第九课 图像处理- PIL (课堂笔记)
- UVA 1645 - Count(简单DP)
- Codeforces Good Bye 2015 A. New Year and Days 水题
- 随机交换检验数据挖掘结果-assessing data mining result via swap randomization
- 《C#本质论》读书笔记(十二)构造器 @ Lennon
- [剑指offer][JAVA]面试题第[05]题[替换空格][StringBuilder/Buffer]
- POJ-3624 Charm Bracelet dp