前言

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

上传项目

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

执行项目

非调度执行

先在服务器的 /home 路径下创建两个文件夹 crawler、logs
执行爬虫(scrapy crawl test),并打印日志(/home/logs/crawlerDemo.log),代码如下:

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

调度执行

同样的,先在服务器的 /home 路径下创建两个文件夹 crawlerlogs
新建一个调度py文件,
注意:调度py文件需要建在这一层级中,否则会出现意想不到的惊喜 ~ ~ ~

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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中执行项目的命令也会有所改变
执行爬虫,并打印日志,代码如下:

1
cd /home/crawler/crawlerDemo/crawlerDemo && nohup python demoTaskSpider.py > /home/logs/demoTaskSpider.log 2>&1 &

查看日志(爬虫输出的日志文件名以 爬虫name 命名)

调度器日志:/home/logs/demoTaskSpider.log

爬虫日志:/home/logs/爬虫名.log