搭配Windows工作排程, 讓Python自動執行


搭配Windows工作排程, 讓Python自動執行

對於Python的網路爬蟲程式有了初步的概念及練習之後, 想到如果有的網站需要每天去捉取資料, 或者大批分頁資料要抓取, 有時會被網站的後台擋下來, 目前的做法是人工每天執行程式, 或是每抓一分頁資後, 再修改程式的內部參數抓取其他分頁......

既然都已經寫成了程式, 不能時間到時自動執行嗎?

初步的想法是程式內做計時功能的迴圈, 讓程式一直在工作狀態只是等時間到自動執行.....但這個方法, 會讓程式變得很麻煩, 且電腦要一直開機, 程式又一直在佔用電腦的系統資源....


請教 Google 大神之後, 得知 windows工作排程, 可以協助定期讓電腦自動執行一些指令及程式...於是著手進行程式的修正及規劃

以下是我的程式範例

#這是測試排程的Python程式
import csv
#開啟控制次數的CSV檔案
with open('次數.csv', newline='', encoding='utf-8') as f:
    rows = csv.reader(f, delimiter=',')    
    for row in rows:
        n = row[0]
        print(n)

#執行 5次後停止執行
if int(n) < 6:

#執行所需的程式片段(例如爬蟲)
    number_list = []
    for i in range(1,1000000*int(n)):
        number_list.append(i)
    print(number_list)   

#執行完將計數寫回CSV檔案
    with open('次數.csv', 'w', newline='', encoding='utf-8') as f:
            writer = csv.writer(f, delimiter=',')
            writer.writerow([str(int(n)+101)[1:]])
  • 這個程式利用一個資料檔 次數.csv 來記錄Python程式每次執行的結果, 以便下次執行時, 接著上次的動作來繼續
  • 在我們要抓取大量分頁資料時, 可以利用上述 次數.csv 的資料檔來記錄已下載到第幾個分頁了
  • 也就是我在 次數.csv 的檔案內容存放初始值 01
  • 然後去執行上述的程式時, 只要完成每一次的動作之後, 會將資料回寫至 次數.csv 的檔案內, 我這裡是每次加 1 然後回存
  • 也就是第一次執行時, 會抓取第 1頁資料, 第二次執行時, 會抓取第2頁資料....
  • 我的範例程式是設定執行第5次之後, 只有空跑, 沒有執行內部的程式片段

為何要在程式中設計這樣的 邏輯判斷 呢? 在 Windows 工作排程設定重覆執行 5次後停下來, 不就好了嗎???

原因在於抓取網頁資料時, 若程式被擋時, 程式會中斷且資料沒有抓取成功, 所以不能保證工作排程設定 5次重覆執行, 就會抓取 5次的資料, 因此在排程上我通常會重覆許多次, 然後在程式中控制抓取次數....

這個程式範例只要在 要執行的程式片斷 被中斷時, 就不會回寫 計數次數.csv 中, 所以下次再執行時, 就會再執行一次

說明如下:

  • 一開始 次數.csv 的內容為01
  • 程式被 工作排程 啟動, 而且程式執行成功, 此時 計數加 1 , 將 02 內容寫入 次數.csv
  • 工作排程的排定時間到時, 程式再次被啟動, 此時程式被中斷, 而 次數.csv 中的內容仍然是 02
  • 下一個工作排程的時間到, 程式再次被啟動, 程式執行成功, 此時 次數.csv 中的內容變動為 03

根據上述的方法, 我們就可以在 次數.csv 來記錄程式的執行次數(或抓取內容的頁數), 然後下次執行時, 再接著執行


Windows 工作排程的設定

Python程式寫法了, 要如何設定 Windows的工程排程?

  1. Windows系統管理工具 中有一個 工作排程器

  2. 點選 動作 選項中的 建立工作, 會出現 建立工作的視窗

  3. 一般 的選項中輸入 工作名稱(必填), 描述(選填)

  4. 觸發程序 的選項中 新增 我們要的排程時間 (若有資料時, 可以按編輯修改)
    這裡我是用 依排程執行, 目前是僅一次來設定 (若是要每天執行, 可以設定成每天)

    設定由 3/12 早上 9:40 開始執行, 每10分鐘重覆一次, 一直執行到 中午 12:28

  5. 動作 的選項中 新增 要執行的程式
    程式或指令碼 輸入 Python
    新增引數 輸入 排程.py (這裡輸入你寫好的 Python 程式 檔案名稱)
    開始位置 輸入 上面引數中的 python 程式檔案 所在的目錄 (我的是在 D槽)

  6. 其他的 條件設定 選項, 我沒有使用, 可以依你的需求來設定

  7. 按確定, 就可以看到 工作已排入排程中

    我原本設定 9:40開始執行, 因為超過時間, 所以沒有執行, 下一個執行時間為 9:50 (我設定每10分鐘執行一次)
    當然你可以按右邊的 執行 來強制執行

以上是我的筆記, 歡迎大家留言互相討論

#Python #爬蟲 #工作排程 #自動執行






留言討論