我有一个运行时需要2个参数的python脚本[url]和[keyword]。文件完成后,将输出一个.csv文件,其结果为[position],[url],[keyword]和[date]。
我正在尝试将此脚本安排为每天使用crontab运行一次。
换句话说,我正在尝试安排以下每天运行:
python3 script.py [url] [keyword]
我在crontab中添加了以下内容(我想通过每分钟运行一次来查看它是否有效)
* * * * * * /usr/bin/python3 /path-to-my-script/rank.py
但没有任何反应,我在/ path-to-my-script /文件夹中看不到预期的.csv文件,当我检查邮件时收到以下错误:
/bin/sh: file-name.csv: command not found
我的python脚本如下:
import sys
import re
import random
from robobrowser import RoboBrowser
import datetime
import csv
sitename = sys.argv[1]
keyword = "+".join(sys.argv[2:])
print("site: %s keyword: %s" % (sitename, keyword))
agent = ['Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:54.0) Gecko/20100101 Firefox/54.0',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0',
'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36',
'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:54.0) Gecko/20100101 Firefox/54.0']
parser = 'html.parser'
browser = RoboBrowser(history=False,
user_agent=random.choice(agent),
parser=parser)
browser.open('https://www.google.com/search?num=100&q=' + keyword)
links = browser.find_all("div", {"class": "g"})
counter = 0
d=[]
for i in links:
counter = counter + 1
if sitename in str(i):
url = i.find_all('a', href=True)
position = "%d" % (counter)
rank = "%s" % (url[0]['href'])
now = datetime.date.today().strftime("%d-%m-%Y")
keyword = keyword
d.append(keyword)
d.append(position)
d.append(rank)
d.append(now)
print(keyword, position, rank, now)
file =datetime.date.today().strftime("%d-%m-%Y")+'-' +keyword + '.csv'
with open(file, 'w') as f:
writer = csv.writer(f)
writer.writerow(['Keyword' , 'Rank', 'URL' , 'Date'])
writer.writerows(zip( d[0::4], d[1::4] , d[2::4], d[3::4]))
我希望每天运行以下命令,并将.csv文件存储在特定的文件夹中
python3 script.py [url] [keyword]
答案 0 :(得分:1)
这是一个简单的示例,用于演示如何使用Shell脚本和cronjob来调度带有args的python脚本。
hello_world.py
import sys
def main():
print(sys.argv[1])
print(sys.argv[2])
if __name__ == '__main__':
main()
hello_world_scheduler.sh-使用此类shell脚本具有许多附加优点,这些优点将来可能会派上用场。
#! /bin/bash
cd /path_to_my_script
/usr/bin/python3 hello_world.py hello world! > execution_logger.log
运行
chmod +x hello_world_scheduler.sh ## to make the script executable
./hello_world_scheduler ## to run the shell script
cat execution_logger.log
输出应为
hello
world!
只需将调度程序添加到cronjob-
* * * * * /path_to_script/hello_world_scheduler.sh
这应该有效