Scrapy, не достается текст

Учу scrapy написал код, который достает с сайта заголовок и цену, но цена не достается возвращается None.

Код:

import scrapy

class SdoSpider(scrapy.Spider):
    name = 'sdo'

    def start_requests(self):
        urls = [
            'https://www.asos.com/ru/nike/belye-krossovki-nike-air-vapormax-360/prd/14839462?clr=belyj&colourwayid=16648058&SearchQuery=&cid=4766',
            'https://www.asos.com/ru/jordan/chernye-krossovki-s-krasnymi-vstavkami-nike-jordan-maxin-200/prd/14821746?clr=chernyj-krasnyj&colourwayid=16646780&SearchQuery=&cid=4766'
        ]
        for url in urls:
            yield scrapy.Request(url=url, callback= self.parse)

    def parse(self, response):
        url = response.url
        price = response.xpath('//*[@id="product-price"]/div/span/span[4]/span[1]/text()').extract_first()
        title = response.css('h1::text').extract_first()
        print(f'URL is {url}')
        print(f'Price: {price}')
        print(f'Title: {title}')

Ответы (1 шт):

Автор решения: cauf

scrapy - это парсер страниц. Все они (парсеры) получают только базовый html и умеют парсить только статичные страницы. Обрати внимание, что цена появляется на странице с задержкой в пару секунд - это означает, что она подгружается при помощи js + ajax. Ты можешь в браузере открыть инструмент разработчика, и убедиться в этом.

Собственно, None ты получаешь ровно потому, что на момент отправки html-кода страницы сервером и, соответственно, получения этого кода scrapy, в блоке цены ничего нет.

Есть, конечно, способ с отловом ajax-запросов, но как по мне, проще в случае динамических страниц использовать Selenium.

→ Ссылка