• 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

    來源:简书

  • 相关阅读:
    Typekit在线字库及使用方法
    SVG基础图形和D3.js
    CSS3 媒体查询@media 查询(响应式布局)
    Bootstrap 栅格系统(布局)
    CSS——图片替换方法:Fahrner图片替换法(FIR)
    CSS sprites(css 精灵):将小图标整合到一张图片上
    [html]点击button后画面被刷新原因:未设置type="button"
    [java]No qualifying bean of type 解决方法
    [eclipse]eclipse设置条件断点Breakpoint Properties
    Intent的setFlag和addFlag有什么区别?
  • 原文地址:https://www.cnblogs.com/Ting-light/p/9543499.html
Copyright © 2020-2023  润新知