Переадресация Scrapy Parse в первую очередь - PullRequest
0 голосов
/ 02 июля 2018

У меня есть некоторый код, который предназначен для обнаружения перенаправления при очистке, а затем возвращает запрос на страницу, на которую он был перенаправлен, чтобы я мог проанализировать перенаправленную страницу. Однако я позволил скребку поработать долго, и ничего не получалось в отношении разбора перенаправленной страницы. Имейте в виду тот факт, что мой список start_urls генерируется динамически и иногда может быть очень длинным. То, что я пытаюсь сделать, это для скребка к

  1. Обнаружение перенаправления
  2. Прекратить очистку start_urls или чего-либо в очереди
  3. Переадресация разбора
  4. Очистить перенаправленную исходную страницу и продолжить очистку start_urls

Очистка исходной страницы не должна быть слишком сложной, и у меня уже есть этот раздел кода, обработанный в операторе else. Моя главная проблема - первые 3 задачи. Я хочу переместить анализ перенаправления в начало списка приоритетов скребков. Как я могу это сделать?

def parse(self, response):
    self.logger.info("got response %d for %r" % (response.status, response.url))

    # handle redirection
    # this is copied/adapted from RedirectMiddleware
    if response.status == 302:

        self.logger.info("Response is 302")

        location = to_native_str(response.headers['location'].decode('latin1'))

        self.logger.info("Location: %s" % location)

        # get the original request
        request = response.request
        # and the URL we got redirected to
        redirected_url = urljoin(request.url, location)

        self.logger.info("Redirected_url: %s" % redirected_url)

        self.logger.info("Yielding redirect instead")
        return scrapy.Request(redirected_url, callback=self.parse, meta={'dont_redirect':True})
    else:
        #parse the redirected page
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...