Xpath

baracuda

Client
Регистрация
19.06.2013
Сообщения
790
Благодарностей
277
Баллы
63
Всем привет. не могу понять как быть. с "уровнями" всё понятно. но вот решил поэкспериментировать с яндексом и немогу понять как быть то есть как привязать уникальное значение. скрин прилагаю. зелёным выделил то что надо. синим уникальное значение. но как связать без уровней понять не могу... понимаю что просто.....

70188
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 496
Благодарностей
1 304
Баллы
113
Всем привет. не могу понять как быть. с "уровнями" всё понятно. но вот решил поэкспериментировать с яндексом и немогу понять как быть то есть как привязать уникальное значение. скрин прилагаю. зелёным выделил то что надо. синим уникальное значение. но как связать без уровней понять не могу... понимаю что просто.....

Посмотреть вложение 70188
Примерно так, писал вручную, так что не знаю, верно ли сложил, не на чем проверить.
//div[@name="worker-6"]/following-sibling::div[contains(@class,"Worker")]
 
  • Спасибо
Реакции: baracuda

baracuda

Client
Регистрация
19.06.2013
Сообщения
790
Благодарностей
277
Баллы
63
Благодарю... именно "following-sibling" и искал.. Ну и конечно же закрыть нужно границу /preceding-sibling::*
 
Последнее редактирование:

baracuda

Client
Регистрация
19.06.2013
Сообщения
790
Благодарностей
277
Баллы
63
Код:
<table cellpadding="3" cellspacing="0" border="0" width="100%">
    <tr valign='top'>
        <td colspan='2' class='op1'>
            <span  class='op1-title'  >
                <span class='cmp-gr-name'>Функции и возможности
                </span>
            </span>
        </td>
    </tr>
    <tr valign='top'>
        <td width='49%' class='op1'>
            <span class='gloss'>
                <span class='nobr ib'>Функции
                </span>
            </span>
        </td>
        <td width="51%" class="op3">автоматическая разморозка
        </td>
    </tr>
    <tr valign='top'>
        <td width='49%' class='op1'>
            <span class='gloss'>
                <span class='nobr ib'>Дополнительно</span>
            </span>
        </td>
        <td width="51%" class="op3">перевешивание дверей скрытые дверные ручки</td>
    </tr>
        <tr data-no-mobile>
            <td colspan="2"><img src="/img/p.gif" width="1" height="1" border="0" alt=""></td></tr>
        <tr data-no-mobile>
            <td colspan="2" class="line11"><img src="/img/p.gif" width="1" height="1" border="0" alt=""></td></tr>
    <tr valign='top'>
        <td colspan='2' class='op1'>
            <span  class='op1-title'  >
                <span class='cmp-gr-name'>Общее
                </span>
            </span>
        </td>
    </tr>
    <tr valign='top'>
        <td width='49%' class='op1'>
            <span class='gloss'>
                <span class='nobr ib'>Управление
                </span>
            </span>
        </td>
        <td width="51%" class="op3">поворотные переключатели
        </td>
    </tr>
    <tr valign='top'>
        <td width='49%' class='op1'>
            <span class='gloss'>Класс энергопотребления
            </span>
        </td>
        <td width="51%" class="op3">A+
        </td>
    </tr>
    <tr valign='top'>
        <td width='49%' class='op1'>
            <span class='gloss>Уровень шума
            </span>
            </td>
        <td width="51%" class="op3">38 дБ
        </td>
    </tr>
    <tr valign='top'>
        <td width='49%' class='op1'>
            <span  >
<span class='cmp-gr-name'>Габариты (ВхШхГ)</span></span></td>
        <td width="51%" class="op3">86x50x53&nbsp;см</td></tr>
<tr valign='top'>
        <td width='49%' class='op1'><span  >
<span class='cmp-gr-name'>Вес</span></span></td>
<td width="51%" class="op3">27 кг</td></tr>
<tr valign='top'>
<td width='49%' class='op1'><span><span class='cmp-gr-name'>Официальный сайт</span></span></td>
<td width='51%' class='op3'><a href='#' class='oficial-site__link' target='_blank' onmouseover='this.href="http://www.nord-holod.ru/catalog/refrigerators/cottage/nord-dkh-403-012/";'>nord-holod.ru</a></td></tr>
<tr valign='top'><td width='49%' class='op1'>
<span><span class='cmp-gr-name'>Дата добавления на E-Katalog</span></span></td>
<td width='51%' class='op3' title=''>июль 2008</td></tr>
</table>

Оригинал https://www.e-katalog.ru/ek-item.php?resolved_name_=NORD-DH-403-012&view_=tbl
как это выглядит в жизни.
70629


интерес распарсить в JSON это уже конечно результат.

Теперь вопрос

Находим заголовки
//span[@class="op1-title"]//span[@class="cmp-gr-name"]
пока не могу понять как вытащить тут значение [1]или[2]или[3] к примеру.

Идём дальше
поднимаемся на уровень и берём всё что ниже following-sibling
//span[@class="op1-title"]/parent::td/parent::tr/following-sibling::tr[@valign="top"]
берёт всех "сестёр", а нам то надо только только часть данных которые принадлежат заголовку данных.

Подскажите в чём ошибка. или логика совсем не верная ?
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 715
Баллы
113

baracuda

Client
Регистрация
19.06.2013
Сообщения
790
Благодарностей
277
Баллы
63
Функции и возможности
Функции : автоматическая разморозка
Дополнительно : перевешивание дверей скрытые дверные ручки
Общие
... : ...
... : ...
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 715
Баллы
113
тот кусок таблица который ты привел скорее всего не является исходным кодом, так как у него отсутствует логическая структура.
если работать только с этим куском, то тут одним xpath не обойтись, тут надо самому придумывать логическое разбиение и обрабатывать в коде кусками.
например получаем элементы tr[@valign="top"] и по ним делаем цикл. если нашли в текущем элементе подэлемент <td colspan='2' class='op1'> то пишем в заголовок и идем на вложенный цикл и начинаем перебирать следующие элементы. если попадется следующий заголовок, то выходим из вложенного цикла и продолжаем первый. это я примерно схему работы накидал.

или приведи исходный код откуда парсить надо, скорее всего там есть нормальная структура :-)
 

baracuda

Client
Регистрация
19.06.2013
Сообщения
790
Благодарностей
277
Баллы
63
есть в годе в конце ссылка на страницу. но тут продублирую сайт

70633
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 715
Баллы
113
да... там так же....
ну тут либо надо быть гуру xpath, просто офигенного уровня, либо как я выше написал парсить данные логическими кусками и внутренние таблицы обрабатывать через код.
 

backoff

Client
Регистрация
20.04.2015
Сообщения
6 013
Благодарностей
6 449
Баллы
113

baracuda

Client
Регистрация
19.06.2013
Сообщения
790
Благодарностей
277
Баллы
63
если без 80 уровня.. данный кусок можно вытащить, и только его. одной строкой xpath ?
70637
 

baracuda

Client
Регистрация
19.06.2013
Сообщения
790
Благодарностей
277
Баллы
63
не совсем корректно, но истина где то рядом

(//span[@class="op1-title"])[*]/parent::td/parent::tr/following-sibling::tr[@valign="top"]

вместо * 1,2,3,4 можно поставить. 2 и 4 похожи на правду а 1 и 3 цепляют лишнее
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 715
Баллы
113
вот для той ссылки что ты дал, попробуй эту (//tr[@valign="top"])[3]//td[@class='op3']/parent::tr
ну и там подшамань как тебе надо.
 
  • Спасибо
Реакции: baracuda

backoff

Client
Регистрация
20.04.2015
Сообщения
6 013
Благодарностей
6 449
Баллы
113

baracuda

Client
Регистрация
19.06.2013
Сообщения
790
Благодарностей
277
Баллы
63
а как их считать то ? у пылесоса одно. у холодильника другое...
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)