То, что я пытаюсь сделать, это запускать эту очистку каждые десять секунд и выводить csv, который отражает время.Позже я хотел бы запланировать очистку, но пока я не смогу заставить это работать, я не думаю, что будет полезно двигаться вперед.Вот мой паук.Мой паук:
import scrapy
import datetime as dt
class EspnSpider(scrapy.Spider):
name = 'espn'
allowed_domains = ['games.espn.com']
start_urls = ['http://games.espn.com/ffl/leaders?&scoringPeriodId=1&seasonId=2018']
today = dt.datetime.today().strftime('%Y%m%d %H%M%S')
custom_settings = {
'FEED_URI': 'filename_{}.csv'.format(today),
'FEED_FORMAT': 'csv',
}
def parse(self, response):
# response.body.decode('utf8')
week = response.xpath('//select[@id="scoringPeriods"]//option[@selected = "selected"]//text()').extract_first()
table = response.xpath('//table[@id="playertable_0"]')
for player in table.css('tr[id]'):
item = {
'id': player.css('::attr(id)').extract_first(),
'tpos': player.css('td.playertablePlayerName::text').extract_first().replace(u'\xa0',u' ').split(',')[-1].strip(),
'name': player.css('a.flexpop::text').extract_first(),
'stats': player.css('td.playertableStat::text').extract()[:-1],
'week': week,
}
yield item
for next_page in response.xpath('//select[@id="scoringPeriods"]//option[contains(text(), "Week")]//@value')[1:].extract():
yield scrapy.Request(response.urljoin('leaders?'+ next_page), callback = self.parse)
Код, который я использую для планирования очистки, находится здесь:
from twisted.internet import reactor
from espn import EspnSpider
from scrapy.crawler import CrawlerRunner
def run_crawl():
runner = CrawlerRunner({
'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)',
})
deferred = runner.crawl(EspnSpider)
deferred.addCallback(reactor.callLater, 10, run_crawl) #I believe that 10 is in seconds
return deferred
run_crawl()
reactor.run()
Первый csv очищен, и, как я хочу.Но это не соскребает снова, а просто бездействует.Какие-нибудь мысли?Спасибо.