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. 2018 Machine Learning

    2018/8/13 线性模型(西瓜书P53~P73) Optimizer https://blog.csdn.net/u012151283/article/details/78154917 2018/ ...

  2. Unity3D学习笔记(十七):IK动画、粒子系统和塔防

    新动画系统: 反向动力学动画(IK功能): 魔兽世界(头部动画),神秘海域(手部动画),人类一败涂地(手部动画) 如何启用(调整) 1.必须是新动画系统Animator 设置头.手.肘的目标点 2.动 ...

  3. java web项目启动进入首页的配置方式(包含过滤跳转首页实现)

    本文为博主原创,未经允许不得转载: 项目启动成功,进入首页的方式,我们往往在web.xml 中通过以下的方式默认进入跳转首页, <welcome-file-list> <welcom ...

  4. NS-3 MyFirstScriptExample

    安装好了NS-3之后,我根据一些教程学习了NS-3的几个关键的概念,然后照着例子和自己对它的一些理解,尝试的打了我自己的第一个脚本程序:MyFirstScriptExample 具体代码如下: #in ...

  5. hdoj-1005-Number Sequences

    题目:Number Sequences 代码: #include<stdlib.h> #include<iostream> #include<cstdio> #in ...

  6. 下列java代码中的变量a、b、c分别在内存的______存储区存放。

    class A{ private String a = "aa"; public boolean methodB(){ String b = "sb"; fin ...

  7. React Native 组件之TouchableHightLight

    TouchableHighlight 这个组件一般是用于封装视图 给视图添加事件“触摸按下”(类似于click事件) <TouchableHighlight onPress={this._onP ...

  8. php 四种基础排序

    1. 冒泡排序算法 *     思路分析:法如其名,就是像冒泡一样,每次从数组当中 冒一个最大的数出来.  *     比如:2,4,1    // 第一次 冒出的泡是4  *             ...

  9. Codeforces 447D - DZY Loves Modification

    447D - DZY Loves Modification 思路:将行和列分开考虑.用优先队列,计算出行操作i次的幸福值r[i],再计算出列操作i次的幸福值c[i].然后将行取i次操作和列取k-i次操 ...

  10. hdu6394Tree lct

    树上弹飞绵羊,现场树分块没写出来= = 先预处理倍增,新建一个n+1节点,能弹到就建一条边,然后每操作2就cut,然后link,1的答案就是x到n+1的距离, //#pragma GCC optimi ...