[英]Python, Beautiful Soup and cron
我正在嘗試使用Python和Beautiful Soup抓取一個網站。 該腳本可以在python update.py
終端上完美運行。 正如相同的update.py
建議,我想每天運行一次。 似乎是cron的一項工作,而不是手動運行它。
但是,當我嘗試將其作為cron作業運行時,出現以下錯誤:
Traceback (most recent call last):
File "/home/me/documents/blotter/update.py", line 121, in <module>
getDailyLog(yday.month, yday.day, yday.year)
File "/home/me/documents/blotter/update.py", line 103, in getDailyLog
note = cleanNote(cells[7], month, day, year, dispatchNumber)
File "/home/me/documents/blotter/update.py", line 57, in cleanNote
rows = detailTable.find_all("tr")
AttributeError: 'NoneType' object has no attribute 'find_all'
我理解錯誤消息(detailTable不是湯對象,因此沒有屬性find_all
)。 如果這是問題所在,我可以調試一下,但是腳本可以在終端上的完全相同的URL上正常運行。 這似乎表明問題不在於腳本。
我使用Beautiful Soup來獲取沒有錯誤的摘要表后,就會出現錯誤。 它試圖在cleanNote
函數中獲取詳細信息表。 這使我認為,一般而言,cron和Beautiful Soup之間不是問題。
是什么會導致在命令行中運行而無障礙的程序在cron作業中崩潰?
編輯 :仍然不清楚為什么它今天早些時候崩潰了,它同時從命令行運行沒有問題,但是cron作業現在似乎正確執行而沒有錯誤。 我沒有做任何更改,只是將工作設置為下午晚些時候,效果很好。
通常, cron
作業在不提供任何“登錄”文件的shell中執行: ~/.profile
, ~/.login
, ~/.kshrc
等。
沒有看到crontab -l
(和您的登錄腳本)的輸出是不可能知道的,但是我的猜測是您的腳本在交互式登錄環境中需要一些東西。 通常的嫌疑犯包括:
默認的PATH
環境變量正在查找與從命令行使用的版本不同的python
版本。
您的PYTHONHOME
, PYTHONPATH
或PYTHONSTARTUP
環境變量包含您依賴的內容。
您的交互式外殼具有別名的"python"
。
您一直在virtualenv
或venv
運行腳本,當您從cron
運行腳本時,該腳本不處於活動狀態。
您的腳本取決於當前工作目錄中的某些內容。
要縮小可疑列表的范圍,請嘗試在命令行上運行python -E update.py
,以查看當各種PYTHON*
環境變量被忽略時會發生什么。 您也可以嘗試-s
和-S
選項---檢查python
手冊頁以了解更多信息。 或使用其絕對路徑名從其他目錄調用腳本。
如果問題僅是缺少的一個環境變量,則可以更改cron
條目以對其進行顯式設置:
* * * * * env VAR=something python /path/to/update.py
或對於其他口譯員:
* * * * * /path/to/python8.e.planks-constant /path/to/update.py
對於更復雜的設置,大多數人會編寫一個前端shell腳本來配置所需的環境, 然后運行您真正想要的腳本:
* * * * * /path/to/update.sh
...其中update.sh
充滿了cd
, export
和source
語句。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.