Как использовать xpath в этом классе data-v-056fbda class

#html #xpath

#HTML #xpath

Вопрос:

Я пытаюсь создать scrapy spider, чтобы получить цену с этой веб-страницы, но регулярные выражения, похоже, не работают для xpath.

Я хотел бы использовать xpath для объединения цены в целое число и цены в десятичной системе счисления. Как я могу это сделать с помощью xpath и css?

Спасибо.

HTML:

 <div data-binded="true" class="vue-price-box">
<div class="PriceBoxWrapper">
    <div data-v-7116dae8="" class="PriceBoxW">
        <div data-v-7116dae8="" class="PriceBoxW-offer">
            <span data-v-7116dae8="" class="PriceBoxW-listPrice">
            <span data-v-0656fbda="" data-v-7116dae8="" class="Price">
                    <span data-v-0656fbda="" class="Price-currency">R$</span> 
                    <span data-v-0656fbda="" class="Price-integer">89</span> 
                    <span data-v-0656fbda="" class="Price-decimal">,90</span></span> 
                <span data-v-b5abd2a4="" data-v-7116dae8="" class="DiscountTag" style="background-color: rgb(246, 139, 44);">
                <span data-v-b5abd2a4="" class="caption">31% OFF</span></span></span> <span data-v-7116dae8="" class="PriceBoxW-member">
                <span data-v-7116dae8="" class="PriceBoxW-member-title caption">Sócio <br data-v-7116dae8="">Wine</span> 
  

Ответ №1:

2 варианта с двумя отдельными выражениями XPath :

 translate(substring(normalize-space(//span[@class="Price"]),4)," ","")

concat(//span[@class="Price-integer"],//span[@class="Price-decimal"])
  

Вывод :

 89,90
  

В первом выражении мы получаем все тексты, происходящие из определенного элемента span, в одной строке. Мы разрезаем его и удаляем бесполезные пробелы. Во втором выражении мы объединяем содержимое из двух текстовых узлов, которые содержат цену продукта.

1 решение с Python и LXML :

 import lxml.html
tree = lxml.html.fromstring(data)
print("".join(els.text for els in tree.xpath('//span[@class="Price"]/span[position()>1]')))
  

где data ваш образец HTML. Мы используем, .text чтобы получить содержимое узлов, а затем join объединить результаты выражения XPath.

Вывод :

 89,90