Scrapy получить URL перед перенаправлением

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

Проблема в том, что я использую правила для передачи параметров в URL (например, field-keyword =xxxxx) и, наконец, получаю правильный URL.

Функция синтаксического анализа начинает получать атрибуты элемента без каких-либо проблем, но когда я хочу начальный URL (истинный), он сохраняет перенаправленный...

Я попробовал:

response.url
response.request.meta.get('redirect_urls')

Оба возвращают последний URL (перенаправленный), а не start_url.

Кто-то знает почему или имеет какое-либо представление?

Заранее спасибо.

2 ответа

Решение

Использовать Spider Middleware чтобы отслеживать стартовый URL от каждого ответа:

from scrapy import Request

class StartRequestsMiddleware(object):

    start_urls = {}

    def process_start_requests(self, start_requests, spider):
        for i, request in enumerate(start_requests):
            request.meta.update(start_url=request.url)
            yield request

    def process_spider_output(self, response, result, spider):
        for output in result:
            if isinstance(output, Request):
                output.meta.update(
                    start_url=response.meta['start_url'],
                )
            yield output

следить за start_url каждый ответ приходит с:

response.meta['start_url']

Ты пытался response.request.url? Я бы лично переопределил start_requests метод, добавляющий исходный URL в мету, что-то вроде:

yield Request(url, meta={'original_request': url})

А затем извлечь его, используя response.meta['original_request']

Другие вопросы по тегам