PZN: 16336937
отсутствует в результатах поиска (витамин D3! = Ибупрофен).
Чтобы получить номер PZN продукта (8 цифр), вы можете извлечь его из элемента img каждого товар. Например, для первого результата поиска ([1]
):
response.xpath('substring(substring-before((//img[@class="product-image-photo img-fluid"])[1]/@src,"_"),string-length(substring-before((//img[@class="product-image-photo img-fluid"])[1]/@src,"_"))-7,8)').extract()
Вывод: 07728561
Вы также можете извлечь значение непосредственно из элемента скрипта, но вы нужно выяснить, как избежать одинарных кавычек в scrapy. XPath:
substring-after(substring-before(//script[contains(.,"Suche")],'",'),'"id": "')
Вывод: 07728561
Примечание: использование регулярных выражений вместо функций подстроки может быть более чистым.
Вы также можете попробовать «перестроить "json из элемента скрипта, загрузите json, затем запросите его. Примерно так должно работать:
import json
products = response.xpath('substring(substring-after(//script[contains(.,"Suche")],"] ="),1,string-length(substring-after(//script[contains(.,"Suche")],"] ="))-1)').extract()
result = json.loads(products)
for i in result:
print i['id']
Последний вариант: запросить данные напрямую из API (с правильно сформированной полезной нагрузкой, действительным токеном и подходящим методом).