在刚开始配置爬虫定时爬取的时候选取了较为简单的time.sleep()这个函数,可能由于环境配置的问题或者是不知道什么玄学的问题。并不能正常生成.csv数据文件。
在换了几个方法后,最终决定采用crontab命令。
配置crontab的方法在网上都有很多写的很清楚。我在这也不做过多赘述。大家可以根据网上的教程来,如果遇见坑再来看我这篇文档会比较好。在文章最后也会放出一些我个人觉得比较好的学习crontab的网站。
1、查看cron.log文件提示No such file or directory
如果有遇到这个问题的一般是rsyslog文件下的crontab没有取消注释掉
在之前有用过crontab的一般不会出现这个问题
第一步修改rsyslog文件
vi /etc/rsyslog.d/50-default.conf
第二步取消掉cron的注释
#cron.* /var/log/cron.log
改为
cron.* /var/log/cron.log
第三步重启rsyslog服务
service rsyslog restart
第四步重启cron服务
service cron restart
第五步查看日志文件
tail -f /var/log/cron.log
这个时候你就能看到crontab在正常运行了
2.执行shell.sh提示没有scrapy这个模块
多条命令的话建议直接使用shell文件来执行定时crontab任务。一是为了美观,二是可以利用shell文件来定位我们的错误在哪里。
shell.sh
source /home/zhangning/spider2/bin/activate #进入spider2虚拟环境,如果没有使用虚拟环境可以忽略此步骤
python3 /home/zhangning/juzhi/juzhi/spiders/begin.py #(在crontab中运行文件需要使用全路径)
以上是shell.sh文件最终的内容
在执行 sh shell.sh中会提示没有scrapy这个模块,原因是我们的路径没有进入到juzhi这个项目的下面,不能直接使用全路径的运行
原本文件中有一条cd命令:cd /home/zhangning/juzhi
但是在shell中,cd命令的运行好像会比较麻烦,所以我把切换目录的命令放在了我的python项目中begin.py文件中
from scrapy import cmdline
import os
os.chdir('home/zhangning/juzhi') #cd到该目录下
cmdline.execute("scrapy crawl investment -o out.csv".split())
这时候就可以运行sh shell.sh 了。
3.执行shell.sh提示source:not found
原因是一大串,反正你只需要执行以下命令就可以了
sudo dpkg-reconfigure dash
然后在弹出来的界面中选择NO
再次执行shell.sh就不会有任何问题了。
以上是我在配置crontab定时任务的时候遇到的一些问题,还有一些小问题就不在这里写出来了,如果有什么不明白的欢迎讨论。