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 шт):
scrapy - это парсер страниц. Все они (парсеры) получают только базовый html и умеют парсить только статичные страницы. Обрати внимание, что цена появляется на странице с задержкой в пару секунд - это означает, что она подгружается при помощи js + ajax. Ты можешь в браузере открыть инструмент разработчика, и убедиться в этом.
Собственно, None ты получаешь ровно потому, что на момент отправки html-кода страницы сервером и, соответственно, получения этого кода scrapy, в блоке цены ничего нет.
Есть, конечно, способ с отловом ajax-запросов, но как по мне, проще в случае динамических страниц использовать Selenium.