前言
当scrapy爬虫项目中含有大量爬虫时(几百甚至更多),我们使用网上所介绍的scrapy同时启动多个爬虫方法会造成因端口不足而使爬虫运行失败。所以当我们的项目中含有大量爬虫时,可以考虑逐个运行爬虫,这样虽然运行时间长了一些但是可以令所有的爬虫都能运行。
一、配置环境
安装爬虫所需要的一些库,这里不再详述。我们主要讲述爬虫的部署以及如何让爬虫在服务器上定时自动运行。
二、编写爬虫运行程序
在spiders文件夹的同级下创建一个新的py文件,命名为run.py,然后编写这个文件,代码如下:
#-*- coding:utf8 -*-
import os
import re
import time
import subprocess
for filename in os.listdir(r'/home/Spidernet/Spider/peoplenet/peoplenet/spiders'):
file_path = os.path.join(r'/home/Spidernet/Spider/peoplenet/peoplenet/spiders',filename)
if os.path.splitext(file_path)[1] == '.py' and filename != 'run.py' and filename != '__init__.py':
temp = ['scrapy','crawl']
ru1 = re.compile(r'(.*).py')
spiderName = ru1.search(filename).group(1)
print(spiderName)
temp.append(spiderName)
subprocess.run(temp)
# subprocess.call("scrapy crawl "+spiderName)
time.sleep(1)
Ttime = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
print(Ttime,'爬虫运行完毕!')
这种方法是通过系统的cmd运行爬虫命令,官方建议调用cmd命令使用subprocess.run方法,subprocess.run() Python 3.5中新增的函数。执行指定的命令,等待命令执行完成后返回一个包含执行结果的CompletedProcess类的实例,之前的版本可以使用subprocess.call方法。这样系统就会逐个执行爬虫运行命令来运行爬虫,最后通过输出爬虫运行完的时间来判断爬虫何时运行完毕。
三、编写执行run.py的脚本文件
我们在其它文件夹下新建一个shell文件夹来存放执行脚本
进入到shell文件夹,新建一个myshell.sh的脚本文件,代码如下
#!/bin/bash
source ~/.virtualenvs/h1/bin/activate
cd /home/Spidernet/Spider/peoplenet/peoplenet
python3 run.py
上面的代码中首先进入到scrapy运行的虚拟环境h1中,然后cd到run.py的目录,执行python3 run.py命令。通过./myshell.sh来运行这个脚本文件。
四、设置定时启动脚本文件
通过上面的设置,我们只要运行myshell.sh脚本文件即可实现逐个执行爬虫命令,最后再用定时命令让myshell.sh文件定时执行就可以了。
首先输入命令: export EDITOR=vim
这样可以通过vim编辑定时命令;
然后输入命令:crontab -e编写定时任务
第1列的30表示分钟,设置范围为0~59;
第2列的16表示小时,设置范围为0~23;
第3列表示日,设置范围为1~31;
添加上图所示的命令,表示每天16:30分执行myshell.sh文件,并把输出的结果保存在spider.log文件中作为日志文件。
这就是每天运行完爬虫后生成的日志文件,可以判断何时运行完毕。
来源:https://blog.csdn.net/WNxiaoning1/article/details/86891235