項(xiàng)目需要程序能夠放在超算中心定時(shí)運(yùn)行,于是針對(duì)scrapy寫(xiě)了一個(gè)定時(shí)爬蟲(chóng)的程序main.py ,直接放在scrapy的存儲(chǔ)代碼的目錄中就能設(shè)定時(shí)間定時(shí)多次執(zhí)行。
最簡(jiǎn)單的方法:直接使用Timer類(lèi)
import time import os while True: os.system("scrapy crawl News") time.sleep(86400) #每隔一天運(yùn)行一次 24*60*60=86400s或者,使用標(biāo)準(zhǔn)庫(kù)的sched模塊 import sched #初始化sched模塊的scheduler類(lèi) #第一個(gè)參數(shù)是一個(gè)可以返回時(shí)間戳的函數(shù),第二個(gè)參數(shù)可以在定時(shí)未到達(dá)之前阻塞。 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() # 開(kāi)始運(yùn)行,直到計(jì)劃時(shí)間隊(duì)列變成空為止關(guān)于cmd的實(shí)現(xiàn)方法,本人在單次執(zhí)行爬蟲(chóng)程序時(shí)使用的是 cmdline.execute("scrapy crawl News".split())但可能因?yàn)閏mdline是scrapy模塊中自帶的,所以定時(shí)執(zhí)行時(shí)只能執(zhí)行一次就退出了。
小伙伴有種方法是使用
import subprocess subprocess.Popen("scrapy crawl News")
她的程序運(yùn)行正常可以定時(shí)多次執(zhí)行,而我的卻直接退出了,改為
from subprocess import Popen subprocess.Popen("scrapy crawl News")
才正常,不知道為什么會(huì)這樣,如果有大神可以解釋原因還請(qǐng)指點(diǎn)。
反正
os.system、subprocess.Popen
都是pythoncmd的實(shí)現(xiàn)方法,可以根據(jù)需要選擇使用。
總結(jié)
以上所述是小編給大家介紹的python實(shí)現(xiàn)scrapy定時(shí)執(zhí)行爬蟲(chóng),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
