Я использовал пакет scrapy-spla sh, и после создания SplashRequest()
паук закрывается до получения любого ответа, кроме первого запроса. Например, в приведенном ниже коде анализируются все данные из раздела tippers , но не из остальных.
Однако, я думаю, все запросы сделаны. Я отслеживал логи контейнера Spla sh docker, и почти все запросы были сделаны, и они были в очереди. Но паук был закрыт после первого раздела, поэтому ни один из оставшихся разделов не мог быть проанализирован. Как мне решить эту проблему? Пожалуйста, помогите.
def parse_event(self, response):
date = response.xpath('//div[@class="form-header__time"]/abbr/@data-utime').extract_first()
try:
date = dateparser.parse(date).strftime("%Y-%m-%d")
except:
print("Exception: Date can't be parsed")
track = response.xpath('//h1[contains(@class, "form-header__curent-meeting")]/a/text()').extract_first()
race_number = response.xpath('//div[contains(@class, "form-header__race-dist")]/text()').extract_first()
if race_number:
race_number = number(race_number.split('Race ')[-1])
else:
race_number = ''
self.logger.warning("ERROR: Race number not found ", race_number)
meta_data = {'track': track, 'race_number': race_number, 'date': date}
response.meta.update(meta_data)
# yield from self.parse_overview(response)
menu_available = response.xpath('//ul[@class="left-menu js-left-menu"]/li/a/@href').extract()
print('-------tippers----------')
if '#Ratings' in menu_available:
tippers_url = response.url + '#Ratings'
yield SplashRequest(url=tippers_url,
callback=self.parse_tippers,
headers=headers,
meta=meta_data,
splash_url=getSplashURL())
print('-------sectional times----------')
if '#SectionalTimes' in menu_available:
sectional_url = response.url + '#SectionalTimes'
yield SplashRequest(url=sectional_url,
callback=self.parse_sectional_times,
headers=headers,
meta=meta_data,
splash_url=getSplashURL())
print('------------speedmap-----------')
if '#Speedmap' in menu_available:
speedmap_url = response.url + '#Speedmap'
yield SplashRequest(url=speedmap_url,
callback=self.parse_speedmap,
headers=headers,
meta=meta_data,
splash_url=getSplashURL())
print('------------odds comparison-----------')
if '#OddsComparison' in menu_available:
odds_url = response.url + '#OddsComparison'
meta_data['bet_type'] = 'win'
yield SplashRequest(url=odds_url,
callback=self.parse_odds,
headers=headers,
meta=meta_data,
splash_url=getSplashURL())
meta_data['bet_type'] = 'place'
lua_script = """
function main(splash, args)
assert(splash:go(args.url))
assert(splash:wait(0.5))
js = 'document.getElementsByClassName("js-bettype__button bettype__button")[1].click()'
splash:runjs(js)
assert(splash:wait(1))
return {
html = splash:html(),
}
end"""
yield SplashRequest(url=odds_url,
callback=self.parse_odds,
headers=headers,
meta=meta_data,
splash_url=getSplashURL(),
args={
'lua_source': lua_script,
'wait': 10
})