Как правильно вызвать другую функцию при разборе текущей страницы?

#python #scrapy

#python #scrapy

Вопрос:

В настоящее время я пытаюсь очистить страницы фильмов IMDB и пока что мне удается очистить детали фильма. Однако, чтобы просмотреть отзывы пользователей, я должен перейти на отдельную страницу со страницы самого фильма, в которой я в настоящее время не уверен, правильный ли мой подход к работе с ней.

Я использую глобальную переменную (data[]) для хранения различных полей (которые в конечном итоге будут сброшены в файл json для elasticsearch), однако, похоже, что одна из моих функций не вызывается, и я не уверен, чего мне не хватает

Общая логика, о которой я думаю, заключается в следующем:

  1. Возьмите все ссылки из моего списка (parse_movie_list)
  2. Для каждой ссылки зайдите внутрь и очистите детали этого отдельного фильма (parse_individual_movie)
  3. После завершения перейдите к очистке обзоров (parse_individual_movie_reviews)
  4. Выдавать данные

 def parse_movie_list(self, response):
    links = response.css('span.lister-item-header a::attr(href)').extract()
    for link in links:
        yield response.follow(link, callback=self.parse_individual_movie)
def parse_individual_movie(self, response):

    reviewlink = response.xpath("//div[contains(@id, 'quicklinksMainSection')]/a[3]/@href").extract()[0] or None
    data['reviewlink'] = reviewlink
    newlink = "https://www.imdb.com" reviewlink
    request = scrapy.Request(newlink,callback=self.parse_individual_movie_reviews)        

    yield data

def parse_individual_movie_reviews(self,response):

    reviews = response.xpath('//div[contains(@id, "main")/section/div[2]/div[2]/div[1]/div[1]/div[1]/div[3]/div[1]/text()').extract() or None

    data['reviewLA'] =  [reviews.strip() for review in reviews] or None

    yield reviews
  

Прямо сейчас моя проблема, похоже, заключается в том, что parse_individual_movie_reviews не вызывается (поскольку окончательный json не отражает существование reviewLA), в идеале цель состоит в том, чтобы reviewLA содержал вырезанные отзывы пользователей из документа.

Комментарии:

1. Попробуйте использовать yield из

2. можете ли вы опубликовать свой полный код, чтобы мы могли проверить и внести в него изменения.