как сделать ,чтобы xpath исключал слова по запросу

alex_tal

Client
Регистрация
30.11.2017
Сообщения
47
Благодарностей
5
Баллы
8
Подскажите, пожалуйста!
Пытаюсь парсить один сайт. Там указаны цены первоначальные на товар и цены теперяшние. Надо чтоб по каждому товару в одном столбце была первоначальная, а а в другом теперяшняя. Иногда первоначальных цен нет, а есть только теперяшние (вместо первоначальных слово "промо"). В этом случае верстка на сайте по тегу div В этой связи при формировании единой таблицы в случаях с "промо" вместо первоначальных цен ничего нет и в эту строку попадает цена следующего товара, и вся таблица таким образом сбивается. Есть ли возможность по xpath как-то обходить товары со словом "промо"? Чтоб он их вообще в таблицу не вносил.
 

luk911

Client
Регистрация
17.01.2013
Сообщения
1 542
Благодарностей
579
Баллы
113
Страницу покажите, быстрее подскажут.
 

one

Client
Регистрация
22.09.2015
Сообщения
6 831
Благодарностей
1 273
Баллы
113
Есть ли возможность по xpath как-то обходить товары со словом "промо"? Чтоб он их вообще в таблицу не вносил.
Делать проверку IF, если есть в переменной промо, то обнулять ее или как то игнорировать. Как то так.
 

backoff

Client
Регистрация
20.04.2015
Сообщения
6 012
Благодарностей
6 448
Баллы
113
аааа, кровь из глаз, не теперяшние, а нынешние ...

покажи страницу, и укажи что надо взять, сделаем тебе xpath
 
  • Спасибо
Реакции: Yuriy Zymlex и alex_tal

alex_tal

Client
Регистрация
30.11.2017
Сообщения
47
Благодарностей
5
Баллы
8
аааа, кровь из глаз, не теперяшние, а нынешние ...

покажи страницу, и укажи что надо взять, сделаем тебе xpath
прошу прощения за теперяшних, про нынешних в курсе))
страница вот https://www.brickeconomy.com/sets/theme/4-juniors
путь xpath писал так: //td[starts-with(@class,'ctlsets-right')]/div[2] для цены retail и //td[starts-with(@class,'ctlsets-right')]/div[3] для цены value
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 713
Баллы
113
для цены retail
//td[starts-with(@class,'ctlsets-right')]/div[2]/small[not (@class="label label-default")]//parent::div
для цены value
//td[starts-with(@class,'ctlsets-right')]/div[2]/small[not (@class="label label-default")]//parent::div/following-sibling::div[1]
 
Последнее редактирование:
  • Спасибо
Реакции: alex_tal и luk911

baracuda

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

//small[text()="Retail"]/following-sibling::text()

//small[text()="Value"]/following-sibling::text()
 
Регистрация
26.05.2020
Сообщения
492
Благодарностей
172
Баллы
43
Ну вот ещё симпотишный вариант придумался.. но почему то не работает

//small[text()="Retail"]/following-sibling::text()

//small[text()="Value"]/following-sibling::text()
Работает, только как сопоставлять с конкретным товаром?
 

alex_tal

Client
Регистрация
30.11.2017
Сообщения
47
Благодарностей
5
Баллы
8
для цены retail
//td[starts-with(@class,'ctlsets-right')]/div[2]/small[not (@class="label label-default")]//parent::div
для цены value
//td[starts-with(@class,'ctlsets-right')]/div[2]/small[not (@class="label label-default")]//parent::div/following-sibling::div[1]
Охренетть! Работает! Спасибо большое!
 

alex_tal

Client
Регистрация
30.11.2017
Сообщения
47
Благодарностей
5
Баллы
8
А не подскажете, где так можно научиться виртуозно им владеть? ))
 

Phoenix78

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

alex_tal

Client
Регистрация
30.11.2017
Сообщения
47
Благодарностей
5
Баллы
8
начни отсюда. а вообще в инете по этому xpath куча инфы, от статей, до видосиков.
и это читаю.

а можно еще вопрос. вот эта страница https://www.brickeconomy.com/sets/theme/hidden-side сбивается опять из-за товара промо. оба пути не ищут данного товара и цены с товарами опять не совпадают((.
 

alex_tal

Client
Регистрация
30.11.2017
Сообщения
47
Благодарностей
5
Баллы
8

Phoenix78

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

а можно еще вопрос. вот эта страница https://www.brickeconomy.com/sets/theme/hidden-side сбивается опять из-за товара промо. оба пути не ищут данного товара и цены с товарами опять не совпадают((.
проверил, вроде одинакого ищут. они не могут сбиться относительно друг друга, так как используется одна база в пути
//td[starts-with(@class,'ctlsets-right')]/div[2]/small[not (@class="label label-default")]//parent::div
и для второго пути используется относительное смещение /following-sibling::div[1]
другое дело как работает кубик парсинга. а он пропускает пустые значения. и получается что по первому xpath имеем 21 элемент , а по 2-му 30.
это не в xpath проблема, а в логике парсинга.
можно посоветовать парсить один верхний элемент по этому пути //td[starts-with(@class,'ctlsets-right')]/div[2]/small[not (@class="label label-default")]//ancestor::td
и получать его innerHtml
и уже потом с каждой записи парсить 1-е и 2-е значение либо через xpath в том же кубике парсинга , либо регуляркой , как удобнее в общем.

вот примерно такой кусок кода вырезается для дальнейшей обработки.
HTML:
                                <div class="visible-xs"><a href="/set/70437-1/lego-hidden-side-mystery-castle"><img src="/resources/images/sets/lego-70437-1_medium.jpg" alt="70437 LEGO Hidden Side Mystery Castle" class="ctlsets-setimage" height="91" wdith="118"></a></div>
<div><small class="text-muted mr-5">Retail</small> 99,99 €</div>
<div><small class="label label-default">Available at retail</small></div>

                                <div id="ContentPlaceHolder1_ctlSets_GridViewSets_PanelUserWantOwn_0" class="ctlsets-wantown text-left hidden-xs">
                                    <div class="ctlsets-wantown-inner">
                                        <div id="ContentPlaceHolder1_ctlSets_GridViewSets_PanelUserSetsNotOwned_0" setid="16571">
                   
                                            <div class="set-ownwanted set-ownwanted-notowned">
                                                <label><span setid="16571" data-toggle="modal" data-target="#LoginModal"><input id="ContentPlaceHolder1_ctlSets_GridViewSets_ckUserSetsNotOwned_0" type="checkbox" name="ctl00$ContentPlaceHolder1$ctlSets$GridViewSets$ctl02$ckUserSetsNotOwned" onclick="$(this).prop('checked', false);"></span> I own this set<span class="set-ownwanted-check"></span></label>
                                            </div>
                                       
                </div>
                                       
                                        <div>
                                            <div id="ContentPlaceHolder1_ctlSets_GridViewSets_PanelUserSetsNotWanted_0" setid="16571">
                   
                                                <div class="set-ownwanted set-ownwanted-notwanted">
                                                    <label><span setid="16571" data-toggle="modal" data-target="#LoginModal"><input id="ContentPlaceHolder1_ctlSets_GridViewSets_ckUserSetsNotWanted_0" type="checkbox" name="ctl00$ContentPlaceHolder1$ctlSets$GridViewSets$ctl02$ckUserSetsNotWanted" onclick="$(this).prop('checked', false);"></span> I want this set<span class="set-ownwanted-check"></span></label>
                                                </div>
                                           
                </div>
                                           
                                        </div>
                                    </div>
                                </div>
75677
 
  • Спасибо
Реакции: alex_tal

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