не удалось получить значения списка с веб-сайта

109
3

я достал все детали с сайта желаний, но не смог получить какую-то конкретную информацию, пожалуйста, направляйте меня на это.

целевой домен: https://shop.adidas.ae/en/messi-16-3-indoor-boots/BA9855.html

мой код - response.xpath('//ul[@class="product-size"]//li/text()').extract()

enter image description here

необходимо получить данные !!!

enter image description here
Благодарю!

спросил(а) 2021-01-19T11:29:38+03:00 6 месяцев, 2 недели назад
1
Решение
78

Часто веб-сайты электронной коммерции имеют данные в формате json в источнике страницы, а затем распаковывают javscript на концах пользователей.

В этом случае вы можете открыть источник страницы с отключенным javascript и искать ключевые слова (например, определенный размер).

Я нашел в этом случае его можно найти с регулярными выражениями:

import re
import json
data = re.findall('window.assets.sizesMap = (\{.+?\});', response.body_as_unicode())
json.loads(data[0])
Out:
{'16': {'uk': '0k', 'us': '0.5'},
'17': {'uk': '1k', 'us': '1'},
'18': {'uk': '2k', 'us': '2.5'},
...}

Изменение: более точно вы, вероятно, захотите получить другую часть json, но, тем не менее, ответ более или менее одинаковый:

data = re.findall('window.assets.sizes = (\{(?:.|\n)+?\});', response.body_as_unicode())
json.loads(data[0].replace("'", '"')) # replace single quotes to doubles

ответил(а) 2021-01-19T11:29:38+03:00 6 месяцев, 2 недели назад
63

Данные, которые вы хотите получить, загружаются из javascript. Он явно указан в теге class="js-size-value ".

Если вы хотите получить его, вам нужно будет использовать службу рендеринга. Я предлагаю вам использовать Splash, он прост в установке и прост в использовании. Вам понадобится докер для установки всплеска.

ответил(а) 2021-01-19T11:29:38+03:00 6 месяцев, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема