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


Mar 11, 2020

對於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 #爬蟲 #工作排程 #自動執行






你可能感興趣的文章

Box Model 與 Display Property

Box Model 與 Display Property

判斷式筆記

判斷式筆記

openCV 介紹與導入實作

openCV 介紹與導入實作






留言討論




cwhgrissomcwhgrissom Jul 30, 2020

你好 Johnny同學, 打擾了, 我是前些日子與你有一同參加 第一期 python證卷投資分析&聊天機器人的同學cwhgirssomcwhgrissom, 因為找不到人可以討論了, 剛好看見你退群, 有提到若想討論可以在這找到你, 所以不知道可否向你請教一些在部屬上遇到的問題. 問題主要是我把課堂的機器人移植到了Django, 移植成功了, 但Django有個後台管理, 我部屬上去後, 遇到兩個問題:

  1. 設定debug=false, 就看不到後台管理的登入畫面. 設定為debug=True, 就可以正常瀏覽都入畫面, why?
  2. 我裡面已經建立了兩個管理者帳號, 但怎麼登入就是登入不進去, 目前完全沒有頭緒.

關於以上兩問題我有在FB的Python TW發文請教, 但沒太多回應, 想說請教你一下, 不知道你對這塊有涉略嗎?
FB 貼文如下: https://www.facebook.com/groups/pythontw/permalink/10160366117903438/

希望沒打擾到你, 若你有空的時候, 不知道是否可以給我點建議, 不管如何, 我都先謝過了 ^^

對了 CodeBridge的介面我實在不太熟悉, 所以只能跑到這來留言了, 若有不妥也煩請跟我說一下 ~ Thanks

JohnnyFoxChang Aug 01, 2020

您好:
Django的範疇, 仍未涉入, 無法提供建議給您
以下是 iT邦幫忙, 相關文章, 希望可以幫上您....
https://ithelp.ithome.com.tw/articles/10212462?sc=pt

cwhgrissomcwhgrissom Aug 02, 2020

好的, 非常謝謝你的回覆, 我先參考你提供的文章, 再繼續研究看看