項目需要程序能夠放在超算中心定時運行,于是針對scrapy寫了一個定時爬蟲的程序main.py ,直接放在scrapy的存儲代碼的目錄中就能設(shè)定時間定時多次執(zhí)行。
最簡單的方法:直接使用Timer類
import timeimport oswhile True: os.system("scrapy crawl News") time.sleep(86400) #每隔一天運行一次 24*60*60=86400s或者,使用標準庫的sched模塊import sched#初始化sched模塊的scheduler類#第一個參數(shù)是一個可以返回時間戳的函數(shù),第二個參數(shù)可以在定時未到達之前阻塞。schedule = sched.scheduler ( time.time, time.sleep )#被周期性調(diào)度觸發(fā)的函數(shù)def func(): os.system("scrapy crawl News")def perform1(inc): schedule.enter(inc,0,perform1,(inc,)) func() # 需要周期執(zhí)行的函數(shù)def mymain(): schedule.enter(0,0,perform1,(86400,))if __name__=="__main__": mymain() schedule.run() # 開始運行,直到計劃時間隊列變成空為止關(guān)于cmd的實現(xiàn)方法,本人在單次執(zhí)行爬蟲程序時使用的是 cmdline.execute("scrapy crawl News".split())但可能因為cmdline是scrapy模塊中自帶的,所以定時執(zhí)行時只能執(zhí)行一次就退出了。小伙伴有種方法是使用
import subprocesssubprocess.Popen("scrapy crawl News")她的程序運行正常可以定時多次執(zhí)行,而我的卻直接退出了,改為
from subprocess import Popensubprocess.Popen("scrapy crawl News")才正常,不知道為什么會這樣,如果有大神可以解釋原因還請指點。
反正
os.system、subprocess.Popen
都是pythoncmd的實現(xiàn)方法,可以根據(jù)需要選擇使用。
總結(jié)
以上所述是小編給大家介紹的python實現(xiàn)scrapy定時執(zhí)行爬蟲,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復(fù)大家的!
新聞熱點
疑難解答
圖片精選