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']