《Python笔记》Scrapy爬虫(3)服务部署及定时调度

这篇记录一下如何部署scrapy 项目

这里是在入门进阶(2)的代码基础,把 scrapy 项目部署到服务器上,并执行启动命令

一、 通过Xftp将项目丢到服务器的 /home 目录下

 

二、 执行项目

1. 非调度执行

先在服务器的 /home 路径下创建两个文件夹 crawlerlogs

执行爬虫(scrapy crawl test),并打印日志(/home/logs/crawlerDemo.log),代码如下:

cd /home/crawler/crawlerDemo && nohup scrapy crawl test > /home/logs/crawlerDemo.log 2>&1 &

2. 调度执行

同样的,先在服务器的 /home 路径下创建两个文件夹 crawlerlogs

在入门进阶(2)的代码基础,新建一个调度py文件,

调度py文件需要建在这一层级中,否则会出现意想不到的惊喜 ~ ~ ~

《Python笔记》Scrapy爬虫(3)服务部署及定时调度_第1张图片

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

你可能感兴趣的:(Python)