爬虫 定时任务

本文介绍了在Python3.6环境下,如何设置爬虫的定时任务。在执行过程中遇到了汉字输出错误、读取JSON文件模式不正确以及urllib返回值问题。通过编写shell脚本和设置cronjob来解决定时执行问题,同时分享了在mac和Ubuntu系统中使用crontab的注意事项。

爬虫 定时任务

环境

python3.6

爬虫文件

  • 问题1: 输出汉字会报错
    # 首行加这段代码
    sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())
    
  • 问题2: 读取json文件
    with open("/root/work/vivo/static/all", "rb") as f: 
        b = json.loads(f.read())
    

    直接执行py文件的时候,读取模式都可以

    但是执行定时任务的时候,必须rb!rb!rb!

  • 问题3: urllib返回值
    # 写法1
    def get_content():
      response = urllib.request.urlopen(req, context=ssl.SSLContext(ssl.PROTOCOL_SSLv23))
      content = json.loads(response.read().decode("utf-8"))
      return content
    
    # 写法2
    def get_content():
      response = urllib.request.urlopen(req, context=ssl.SSLContext(ssl.PROTOCOL_SSLv23))
      return json.loads(response.read().decode("utf-8"))
    

    直接执行py文件的时候,两种写法都可以

    执行定时任务的时候第二种写法不对,一直报返回值为空

编写shell脚本

cd '/root/work/vivo' $0 || exit 1
/root/software/anaconda3/envs/spider/bin/python3.6 fuck.py >> vivo_crawler.log 2>&1
注释:

cd ‘/root/work/vivo’: 进入到文件夹

/root/software/anaconda3/envs/spider/bin/python3.6: python解释器的位置
fuck.py: 要执行的文件

‘>>’: 重定向 将fuck.py的输出内容,写到后面的文件中

vivo_crawler.log: 接收fuck.py执行过程中的输出内容

给shell脚本增加执行权限
sudo chmod +x vivo_crawler.sh

编写定时任务

  • mac

    直接使用crontab -e 总有问题,应该是编辑器的问题

    可以使用EDITOR=vim crontab -e

    */10 * * * * /root/work/vivo/vivo_crawler.sh
    
    注释:

    /root/work/vivo/vivo_crawler.sh : shell脚本的位置

    这是一个每10分钟执行一次的定时任务

  • ubuntu

    crontab -e之后选择编辑器,vim就可以

    */10 * * * * /root/work/vivo/vivo_crawler.sh
    
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值