#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