linux上定时运行scrapy
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的更多相关文章
- npm run dev 在Linux上持久运行
关于node.js应用程序如何持久运行,我在node.js服务端程序在Linux上持久运行用过. 这次主要是针对是一个vue.js应用程序. vue.js应用程序通常运行命令是npm run dev. ...
- node.js服务端程序在Linux上持久运行
如果要想在服务端部署node.js程序,让其持久化运行,就不能单单使用npm start命令运行,当然了,这样运行是毫无问题的,但是当关闭xshell窗口或者是关闭进程的时候(其实关闭xshell窗口 ...
- springboot打成的jar包如何在Linux上持久运行
一.首先说说在没有springboot的时候,项目是如何部署的? 1.动态web项目 动态web项目部署很方便,基本上上传文件到服务器的tomcat里面的webapps文件夹下即可完成部署.当然了,这 ...
- Linux上后台运行node和springboot服务
环境:Ubuntu18.04 阿里云云服务器 尝试全局安装forever和pm2均失败,最后以linux自带的nohub启动,以前同样用nohub启动springboot 命令: nohup npm ...
- Mac上定时运行脚本工具--launchctl
在Mac上可以像在Linux上一样,使用crontab来定时运行脚本,但苹果并不推荐这个方法.苹果推荐使用Launchctl来完成定时任务. 首先,我们先写一个可执行的脚本,列子为php脚本,名字为t ...
- linux上编写运行 dotnet core api
安装 Ubuntu dotnet core 跨平台已不再是梦,它带来的意义非凡,比如api接口可以在linux上编写及部署,也可以在windows上编写好,打包发布,然后copy到lin ...
- windows下写的shell脚本到linux上不能运行
win上是dos模式,需要改成unix模式 方法是: 在linux上vim 打开脚本,然后:set ff=unix
- (原创)在Linux上安装运行Python3(CentOS7为例)
在win10上开发好的python项目要部署在Linux上要面对的问题:怎么在Linux上跑py文件呢? 以Lunix CentOS7.x平台为例,CentOS系统上自带的已有python2.x 的版 ...
- Linux上定时shell脚本
原文链接:http://www.92coder.com/9-Linux%E5%AE%9A%E6%97%B6shell%E8%84%9A%E6%9C%AC/#more 本文主要介绍在Linux系统上部署 ...
随机推荐
- spring boot 使用@ConfigurationProperties
有时候有这样子的情景,我们想把配置文件的信息,读取并自动封装成实体类,这样子,我们在代码里面使用就轻松方便多了,这时候,我们就可以使用@ConfigurationProperties,它可以把同类的配 ...
- HDU 3065 病毒侵袭持续中(AC自动机(每个模式串出现次数))
http://acm.hdu.edu.cn/showproblem.php?pid=3065 题意:求每个模式串出现的次数. 思路: 不难,把模板修改一下即可. #include<iostrea ...
- UVa 11300 分金币
https://vjudge.net/problem/UVA-11300 题意: 圆桌上有n个人,每个人都有一定的初始金币,每个人可以给他旁边的人一些金币,最终使每个人的金币数相等.计算最少需要转手的 ...
- Linux下wget下载整个FTP目录(含子目录)--转载
wget -nH -m --ftp-user=your_username --ftp-password=your_password ftp://your_ftp_host/* 解释:-nH:不创建以主 ...
- BZOJ 4571 【SCOI2016】 美味
题目链接:美味 如果题目里面没有那个\(a_i\),这道题就可以直接在\(Trie\)树上走一走就做完了.现在多了个\(a_i\),\(Trie\)树就无能为力了. 我们考虑一下在\(Trie\)树上 ...
- iBatis的CRUD操作详细总结
昨天晚上看了一下关于iBatis的一个讲解的视频,讲的和我的这个简单的总结差不多.... 思考了一下还是把主要操作都总结一下吧,当然这里也不是全的,知识简单的CRUD... 首先我觉得持久层的操作主要 ...
- hihocode 九十七周 中国剩余定理
题目1 : 数论六·模线性方程组 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:今天我听到一个挺有意思的故事! 小Hi:什么故事啊? 小Ho:说秦末,刘邦的将军 ...
- poj 1330 Nearest Common Ancestors lca 在线rmq
Nearest Common Ancestors Description A rooted tree is a well-known data structure in computer scienc ...
- c++ 判断两个容器是否相等(equal)
#include <iostream> // cout #include <algorithm> // equal #include <vector> // vec ...
- spring boot 开发 org.springframework.context.ApplicationContextException: Unable to start web server;
Error starting ApplicationContext. To display the conditions report re-run your application with 'de ...