Почему паук закрывается до завершения запросов с помощью SplashReqest при использовании scrapy-spla sh? - PullRequest
0 голосов
/ 01 августа 2020

Я использовал пакет 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
                                })
...