У меня есть некоторый код, который предназначен для обнаружения перенаправления при очистке, а затем возвращает запрос на страницу, на которую он был перенаправлен, чтобы я мог проанализировать перенаправленную страницу. Однако я позволил скребку поработать долго, и ничего не получалось в отношении разбора перенаправленной страницы. Имейте в виду тот факт, что мой список start_urls генерируется динамически и иногда может быть очень длинным. То, что я пытаюсь сделать, это для скребка к
- Обнаружение перенаправления
- Прекратить очистку start_urls или чего-либо в очереди
- Переадресация разбора
- Очистить перенаправленную исходную страницу и продолжить очистку 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