这篇记录一下如何部署scrapy 项目
这里是在入门进阶(2)的代码基础,把 scrapy 项目部署到服务器上,并执行启动命令
1. 非调度执行
先在服务器的 /home 路径下创建两个文件夹 crawler、logs
执行爬虫(scrapy crawl test),并打印日志(/home/logs/crawlerDemo.log),代码如下:
cd /home/crawler/crawlerDemo && nohup scrapy crawl test > /home/logs/crawlerDemo.log 2>&1 &
2. 调度执行
同样的,先在服务器的 /home 路径下创建两个文件夹 crawler、logs
在入门进阶(2)的代码基础,新建一个调度py文件,
调度py文件需要建在这一层级中,否则会出现意想不到的惊喜 ~ ~ ~
import logging
import schedule
import subprocess
import os
# 需要调度的爬虫的name
spider_name = "test"
# 创建日志组件
logger = logging.getLogger("consume_redis")
logger.setLevel(logging.DEBUG)
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
ch.setFormatter(formatter)
logger.addHandler(ch)
def job():
child = subprocess.Popen(["pgrep", "-f", spider_name], stdout=subprocess.PIPE, shell=False)
logger.info(child)
pid = child.communicate()[0].decode('utf-8')
logger.info(pid)
if not pid:
shell = "cd /home/crawler && nohup scrapy crawl " + spider_name + " >/home/logs/" + spider_name + ".log 2>&1 &"
os.system(shell)
logger.info("爬虫启动成功")
else:
logger.info("该爬虫已在服务器运行!")
# 首次执行方法
job()
# 定时调度器(分钟)
#schedule.every(10).minutes.do(job)
schedule.every().day.at("08:00").do(job)
while True:
schedule.run_pending()
使用了调度器以后,所以在Linux中执行项目的命令也会有所改变
执行爬虫,并打印日志,代码如下:
cd /home/crawler/crawlerDemo/crawlerDemo && nohup python demoTaskSpider.py > /home/logs/demoTaskSpider.log 2>&1 &
日志路径(爬虫输出的日志文件名以 爬虫name 命名)
调度器日志:/home/logs/demoTaskSpider.log
爬虫日志:/home/logs/爬虫名.log