Xpath

  • Автор темы Автор темы baracuda
  • Дата начала Дата начала

baracuda

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

70188
 
Всем привет. не могу понять как быть. с "уровнями" всё понятно. но вот решил поэкспериментировать с яндексом и немогу понять как быть то есть как привязать уникальное значение. скрин прилагаю. зелёным выделил то что надо. синим уникальное значение. но как связать без уровней понять не могу... понимаю что просто.....

Посмотреть вложение 70188
Примерно так, писал вручную, так что не знаю, верно ли сложил, не на чем проверить.
//div[@name="worker-6"]/following-sibling::div[contains(@class,"Worker")]
 
  • Спасибо
Реакции: baracuda
Благодарю... именно "following-sibling" и искал.. Ну и конечно же закрыть нужно границу /preceding-sibling::*
 
Последнее редактирование:
Код:
Развернуть Свернуть Копировать
<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"]
берёт всех "сестёр", а нам то надо только только часть данных которые принадлежат заголовку данных.

Подскажите в чём ошибка. или логика совсем не верная ?
 
Функции и возможности
Функции : автоматическая разморозка
Дополнительно : перевешивание дверей скрытые дверные ручки
Общие
... : ...
... : ...
 
тот кусок таблица который ты привел скорее всего не является исходным кодом, так как у него отсутствует логическая структура.
если работать только с этим куском, то тут одним xpath не обойтись, тут надо самому придумывать логическое разбиение и обрабатывать в коде кусками.
например получаем элементы tr[@valign="top"] и по ним делаем цикл. если нашли в текущем элементе подэлемент <td colspan='2' class='op1'> то пишем в заголовок и идем на вложенный цикл и начинаем перебирать следующие элементы. если попадется следующий заголовок, то выходим из вложенного цикла и продолжаем первый. это я примерно схему работы накидал.

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

70633
 
да... там так же....
ну тут либо надо быть гуру xpath, просто офигенного уровня, либо как я выше написал парсить данные логическими кусками и внутренние таблицы обрабатывать через код.
 
если без 80 уровня.. данный кусок можно вытащить, и только его. одной строкой xpath ?
70637
 
не совсем корректно, но истина где то рядом

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

вместо * 1,2,3,4 можно поставить. 2 и 4 похожи на правду а 1 и 3 цепляют лишнее
 
вот для той ссылки что ты дал, попробуй эту (//tr[@valign="top"])[3]//td[@class='op3']/parent::tr
ну и там подшамань как тебе надо.
 
  • Спасибо
Реакции: baracuda
а как их считать то ? у пылесоса одно. у холодильника другое...
 

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