美文网首页
分布式爬虫控制脚本开发

分布式爬虫控制脚本开发

作者: bb2eef9c6b14 | 来源:发表于2017-06-18 16:47 被阅读14次

在Redis中,使用一个字符串来存放命令。字符串的名字叫做"scrapy_manager",它的值只有三种:start,stop 和deploy。

1.start

start这个命令的作用是创建一个子进程来运行爬虫,使用到的是Python的subprocess库。

self.START_SPIDER ='python {}'.format(os.path.join('last_release','main.py'))

self.process = subprocess.Popen(shlex.split(self.START_SPIDER))

由于在Windows下,路径中使用反斜杠作为分隔符,而在Linux和Mac OS中,使用斜杠作为分隔符,所以这里的分隔符使用Python自动生成。

shlex.split()

可以将一个字符串按照空格分成列表,因此在这里相当于:

self.START_SPIDER.split(' ')

实际上subprocess.Popen是可以使用字符串命令作为参数,但是有时候会出现莫名其妙的问题,因此建议大家像上面代码一样将命令切分为列表来使用。

2.stop

所谓的停止爬虫其实就是杀掉子进程,使用以下代码来实现:

self.process.kill()

3.deploy

自动部署功能的原理是:将修改以后的爬虫打包为zip文件,放在Master服务器上,然后向Redis写入deploy命令。程序读到这个命令以后,就使用requests将zip文件下载到本地,然后解压缩覆盖之前的程序。Python程序在运行的时候,.py文件是可以被直接修改的,但是修改并不会立刻生效,因此需要停止爬虫,然后重新运行。在我提供给大家的代码中,解压缩zip的功能是通过调用系统API来实现的。大家也可以直接使用Python自带的库来实现解压缩。

相关文章

网友评论

      本文标题:分布式爬虫控制脚本开发

      本文链接:https://www.haomeiwen.com/subject/jbziqxtx.html