Страницы: 1
RSS
Формировании запроса XPath для парсинга цены с сайта
 
Добрый день.

Подскажите, пожалуйста, XPath для парсинга цены с сайта: https://www.dns-shop.ru/product/c2a9da46ce083332/mikrovolnovaa-pec-dexp-ms-71-cernyj/
По моей логике это "//span[@class='product-card-price__current']". Но, видимо, моя логика не работает. Подскажите, что не так?
 
AVERS,
Какой результат возращается?
Попробуйте //span[@class='product-card-price__current']/text()
 
DrillPipe, в моем результате возвращает "нет данных для импорта". В вашем варианте "Не удалось обработать данные в формате XML".
Как я понял, загвоздка в том, что помимо цены, в этом же блоке присутствует тег <i>. А вот как обойти, не понимаю.

P.S.
извиняюсь, соврал. Ответ такой же. Сам ошибку допустил.
 
AVERS,
зависит от того инструмента которым вы работаете
//span[@class='product-card-price__current']/text() - вернет 2 значения
А вот это
( //span[@class='product-card-price__current']/text() )[1] - первое

Превышен допустисый размер вложения. Рисунки удалены [МОДЕРАТОР]
 
DrillPipe, тоже не работает. =(
https://docs.google.com/spreadsheets/d/1Setv7bOtNZ8d4FR4yEgWjZ-TU4Y39mo5dvIcZeZFrYI/edit?usp=drivesd...
Вот сам документ. Буду уже завтра разбираться, почти 12, вставать в 6. Но победить это хочу принципиально.

DrillPipe, работаю в Гугл доках. Понимаю, что форум по Эксель, но в данный момент времени, удобнее там. Буду пробовать, спасибо.  
 
Цитата
AVERS написал: работаю в Гугл доках
Об этом надо сразу сообщать
 
Цитата
AVERS написал:
Вот сам документ
Видимо какя-то проблема с загрузкой.
Если выгрузить страницу и проверить количество тегов count(//span/text()) - это вернет 125 значений
А если проверить в вашей гугл-таблице - то возращает 36 значений
 
Нет там проблемы, я на эту тему уже давал ответ.
javascript заполняет документ в зависимости от региона, и этого class='product-card-price__current' нет в html страницы
Вот так выглядит исходный вид страницы
 
doober, по умолчанию, в качестве региона, всегда Москва, как я понял. По этому, в качестве примеров теперь только товары, которые без проблем грузит на сайте МСК.  
 
Повторяю еще раз.
Цены заполняются скриптом при загрузке страницы в браузер.
 
doober, то есть, в самом исходном коде страницы цена присутствует. В Гугл таблицы ни как эти данные не вытянуть?
 
Только написанием скрипта  на парсинг текста страницы.
 
Цитата
AVERS написал:
В Гугл таблицы ни как эти данные не вытянуть
XPath выражение
Код
substring-before(
    substring-after(
        //script[contains(text(),'price')][contains(text(),'main-sw-registered')]/text(),
    'price'),
',')
Вернет ":2999 (не знаю как вставить price": - может как-то заэкранировать ")


Эта выражение возвращает прайс 2999
Код
substring-after(
    substring-before(    
        substring-after(
            //script[contains(text(),'price')][contains(text(),'main-sw-registered')]/text(),
        'price'),
    ','),
':')
Изменено: DrillPipe - 16.12.2020 13:15:01
 
Или качать их прайсы и тягать данные .../files/price/price-moscow.xls
Но, обновляют вроде раз в день или того меньше.
Город меняет простым GET запросом и работой в сессии - .../ajax/change-city/?city_guid=55506b58-0565-11df-9cf0-00151716f9f5
 
DrillPipe, спасибо огромное, за помощь и затраченное время. За потраченное время и помощь. В выражении почти ничего не понял, но это работает и знаю куда копать. =)
 
Цитата
Oleg Boyaroff написал:
Город меняет простым GET запросом и работой в сессии - .../ajax/change-city/?city_guid=55506b58-0565-11df-9cf0-00151716f9f5
Думал тоже о том, что добавив токен к ссылке, можно сменить город на необходимый. Но я в этом прям ноль, вообще не понимаю, как работает.
Брал код одной и той же страницы, с разными городами. Код сравнивал, но вытянуть главное не смог, не осилил.
 
AVERS,
все просто
//script - выбирает все теги с таким наименованием
[contains(text(),’price’)] - предикат (условие фильтрации) , в данном случае выбрать теги у которых в тексте находится price
[contains(text(), ‘main-sw-registered’] - предикат, так как тегов  script содержащим слово price на странице несколько и мы уточняем, что хотим выбрать из того который содержит второе слово
/text() - выбираем только текст

А дальше манипуляции с текстом для отбора нужного значения
на картинке в 10 сообщении есть такой текст   “price”: 2999,

И функции xpath позволяют отобрать текст до или после интересующего нас текста (знака)
Изменено: DrillPipe - 17.12.2020 09:16:27
 
AVERS,

Вы можете посмотреть какой результат возвращает ваш запрос на XPath прямо в консоли
Наберите в Chrom например $x("(//script[contains(text(),'price')])") на странице указанной в 1-ом посте

И сразу увидите результат
 
Изменено: DrillPipe - 18.12.2020 09:53:14
 
DrillPipe, благодарю за разъяснения и примеры. Буду разбираться в теме. =)
 
Цитата
DrillPipe написал:
XPath выражение
У меня похожая проблема. Куда вставлять это выражение? Как увязать этот код с адресом URL конкретной страниц(ы)
Дошел уже до написания скрипта, но не знаю как связать скрипт и адрес URL
Код
function onOpen() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [{name : "Pars",functionName : "MakeMeHappy"}];
  sheet.addMenu("Scripts", entries);
};
function MakeMeHappy(){
 substring-after(
    substring-before(    
        substring-after(
            //script[contains(text(),&#39;price&#39;)][contains(text(),&#39;main-sw-registered&#39;)]/text(),
        &#39;price&#39;),
    &#39;,&#39;),
&#39;:&#39;)
};

Вот так можно?
Код
=IMPORTXML(B2, "substring-after(substring-before(substring-after(//script[contains(text(),&#39;price&#39;)][contains(text(),&#39;product-buy__price_active&#39;)]/text(),&#39;price&#39;),&#39;,&#39;),&#39;:&#39;)")
Страницы: 1
Наверх