1 运行方式一

(proxy-ip) [root@192 ~]# cd /data/test-proxy-ip/

(proxy-ip) [root@192 test-proxy-ip]# scrapy list

proxy_ip

(proxy-ip) [root@192 test-proxy-ip]# scrapy crawl proxy_ip

...

insert into proxy_ip(

country, ip, port, server_location,

is_anonymous, protocol_type, speed, connect_time,

survival_time, validate_time, source, create_time

)

VALUES (%s, %s, %s, %s, %s,  %s, %s, %s, %s, %s,  %s, %s)

('CN', '120.33.247.127', '25998', '福建莆田', '高匿', 'HTTP', '1.759秒', '1.759秒', '4天', '2018-05-31 17:44:00', 'www.xicidaili.com', '2018-05-31 11:44:39')

(1062, "Duplicate entry '120.33.247.127-25998' for key 'ip'")

第一步,进入我们的项目根目录。

第二步,可以执行 scrapy list 命令查看我们的所有的爬虫,这儿的 "proxy_ip" 就是我们在 spiders 下面的 xicidaili.py 中定义的 name 的值。

第三步,执行 scrapy crawl proxy_ip 运行爬虫。

注:

这种方式只是在前台运行,即当我们的会话结束,程序运行也就结束了。如果我们要想程序在后台运行,可以使用 nohup scrapy crawl proxy_ip & 这样的方式来执行

2 运行方式二

我们的爬虫是每次爬取西刺代理前 5 页的内容,如果我们想隔一段重复爬取一次呢。下面我们可以使用 crontab 的定时任务的方法实现,编辑 crontab -e ,在末尾添加如下命令并保存退出。

(proxy-ip) [root@192 ~]# crontab -e

00 * * * * workon proxy-ip && cd /data/test-proxy-ip/ && nohup scrapy crawl proxy_ip & >> ~/proxy_ip.log

以上命令表示每个小时的整点会执行我们的爬虫程序

运行方式三

此方法是我们写一个 python 脚本,在 python 脚本中来调用系统命令 scrapy crawl proxy_ip,然后使用 python 的休眠来控制程序运行。

此 Python 脚本在我们可以创建在项目的根目录下,脚本名称随意,如 main.py 表示这是我们项目的入口文件,脚本内容如下:

# -*- coding:utf-8 -*-

__author__ = 'jiangzhuolin'

import sys

import os

import time

while True:

os.system("scrapy crawl proxy_ip")  # scrapy spider 的启动方法 scrapy crawl spider_name

print("程序开始休眠...")

time.sleep(3600)  # 休眠一小时后继续爬取

然后我们使用如下方式运行我们的这个 python 脚本在后台即可:

[root@192 ~]# workon proxy-ip

(proxy-ip) [root@192 ~]# cd /data/test-proxy-ip/

(proxy-ip) [root@192 test-proxy-ip]# ls

main.py  proxy_ip  README.md  scrapy.cfg

(proxy-ip) [root@192 test-proxy-ip]# nohup python main.py &

[1] 36449

(proxy-ip) [root@192 test-proxy-ip]# nohup: ignoring input and appending output to `nohup.out'

五、总结

该系统使用一个简单的示例从环境搭建到代码编写到部署运行的完整过程分享了一个 Python Scrapy 爬虫的大致生产流程。以后有机会再分享更多 Python Scrapy 爬虫的知识,包括 Scrapy 分布式爬虫,Scrapyd 监控等等...

六、附录

以下是一个部署脚本,可以实现每次更新代码到仓库之后,执行该脚本自动重启项目运行。

#! /bin/bash

# 使用环境变量生效

source /etc/profile

PROJECT_DIR="/data"

PROJECT_NAME="test-proxy-ip"

PYTHON_ENV="proxy_ip"

EXECUTE_FILE="main.py"

cd ${PROJECT_DIR}

# 拉取项目

if [ ! -d ${PROJECT_NAME} ]

then

git clone git@gitee.com:jzl975/${PROJECT_NAME}.git

fi

# 进入项目目录

cd $PROJECT_NAME

# 拉取最新代码

git pull

# 切换到虚拟环境

workon ${PYTHON_ENV}

# 停止进程

PID=`ps -ef | grep ${EXECUTE_FILE} | grep -v grep | awk '{print $2}'`

if [ $PID ]

then

`kill -9 ${PID}`

fi

# 运行入口程序

nohup python ${EXECUTE_FILE} &

作者:雨林_a1d6

链接:https://www.jianshu.com/p/58087107557d

來源:简书

linux上定时运行scrapy的更多相关文章

  1. npm run dev 在Linux上持久运行

    关于node.js应用程序如何持久运行,我在node.js服务端程序在Linux上持久运行用过. 这次主要是针对是一个vue.js应用程序. vue.js应用程序通常运行命令是npm run dev. ...

  2. node.js服务端程序在Linux上持久运行

    如果要想在服务端部署node.js程序,让其持久化运行,就不能单单使用npm start命令运行,当然了,这样运行是毫无问题的,但是当关闭xshell窗口或者是关闭进程的时候(其实关闭xshell窗口 ...

  3. springboot打成的jar包如何在Linux上持久运行

    一.首先说说在没有springboot的时候,项目是如何部署的? 1.动态web项目 动态web项目部署很方便,基本上上传文件到服务器的tomcat里面的webapps文件夹下即可完成部署.当然了,这 ...

  4. Linux上后台运行node和springboot服务

    环境:Ubuntu18.04 阿里云云服务器 尝试全局安装forever和pm2均失败,最后以linux自带的nohub启动,以前同样用nohub启动springboot 命令: nohup npm ...

  5. Mac上定时运行脚本工具--launchctl

    在Mac上可以像在Linux上一样,使用crontab来定时运行脚本,但苹果并不推荐这个方法.苹果推荐使用Launchctl来完成定时任务. 首先,我们先写一个可执行的脚本,列子为php脚本,名字为t ...

  6. linux上编写运行 dotnet core api

    安装 Ubuntu        dotnet core 跨平台已不再是梦,它带来的意义非凡,比如api接口可以在linux上编写及部署,也可以在windows上编写好,打包发布,然后copy到lin ...

  7. windows下写的shell脚本到linux上不能运行

    win上是dos模式,需要改成unix模式 方法是: 在linux上vim 打开脚本,然后:set ff=unix

  8. (原创)在Linux上安装运行Python3(CentOS7为例)

    在win10上开发好的python项目要部署在Linux上要面对的问题:怎么在Linux上跑py文件呢? 以Lunix CentOS7.x平台为例,CentOS系统上自带的已有python2.x 的版 ...

  9. Linux上定时shell脚本

    原文链接:http://www.92coder.com/9-Linux%E5%AE%9A%E6%97%B6shell%E8%84%9A%E6%9C%AC/#more 本文主要介绍在Linux系统上部署 ...

随机推荐

  1. annovar积累

    20170222 ANNOVAR简介 ANNOVAR是由王凯编写的一个注释软件,可以对SNP和indel进行注释,也可以进行变异的过滤筛选. ANNOVAR能够利用最新的数据来分析各种基因组中的遗传变 ...

  2. hdu 2824 The Euler function 欧拉函数打表

    The Euler function Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  3. HHVM代码规范

    原文戳我 本文旨在为HHVM编写C++代码提供一种指南,包括了什么时候.怎么使用各种语言功能,以及代码的格式.我们的目标是确保代码持续高可用的同时,还能容易被阅读和参与贡献,尤其是对新人而言. HHV ...

  4. python 字符串输出转义{}

    >>> print ("{} 对应的位置是 {{0}}".format("runoob")) runoob 对应的位置是 {}

  5. python 数据交换

    例1 def change(data): data[],data[]=data[],data[] print('函数内交换位置后:') ): print('data[%d]=%3d' %(i,data ...

  6. Angular2,Springboot,Zuul,Shiro跨域CORS请求踩坑实录

    前言:前后端分离,业务分离,网关路由等已经成为当下web application开发的流行趋势.前端以单页面路由为核心的框架为主体,可以单独部署在nodejs或nginx上.后端以springboot ...

  7. Codeforces 894B - Ralph And His Magic Field

    894B - Ralph And His Magic Field 思路: 当k为1时,如果n和m奇偶性不同,那么没有答案. 可以证明,在其他情况下有答案,且答案为2^(n-1)*(m-1),因为前n- ...

  8. Unity 中 ContextMenu 的用法

    在自定义脚本中的方法前加入  [ContextMenu("Execute")]  标签,然后将脚本挂载到对象上,可以再编辑模式下执行标记的方法: 自定义脚本如下: using Sy ...

  9. infra 仪表盘效果

    private void Gauge2() { // Infragistics.WebUI.UltraWebGauge.UltraGauge ultraGauge2 = //new Infragist ...

  10. select exists 的应用一例

    当遇到多层exists的时候,事情就变得开始复杂了.我们来看看这个例子吧 假设有三张表 选课表:学号.课程号 学生表:学号.姓名 课程表:课程号.课程名 请选出选了所有课程的学生 SELECT 姓名 ...