Как извлечь число с помощью xpath в python, если вокруг числа есть текст? - PullRequest
0 голосов
/ 06 апреля 2019

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

например

<span class="price--content content--default">
Ihr Preis:
13.815,00&nbsp;€
</span>

>>> response.xpath('//span[@class="price--content content--default"]/text()').extract()

['\n', '\n', '\nIhr Preis:\n13.815,00\xa0€\n']

Другой пример здесь:

<span class="price--content content--default">
Jetzt:
5.765,00&nbsp;€
</span>

Как я могу убедиться, что xpath получает номер во всех случаях, даже если нет текста, а только номер?

Как альтернатива, если это невозможно, как я могу получить первый номер списка с помощью python?

Ответы [ 3 ]

1 голос
/ 08 апреля 2019

Вы можете сделать это даже с выражением XPath 1.0, при условии, что есть одно и только одно число, и используемый вами модуль python может иметь дело с типами данных результата, отличными от набора узлов.Использование:

translate(
   //span[@class="price--content content--default"],
   translate(//span[@class="price--content content--default"],'0123456789.,',''),
   '')
0 голосов
/ 06 апреля 2019

Поскольку вы ищете цену, проблема в том, что, по-видимому, вам нужно извлечь всю цену, включая центы (или любой другой эквивалент для данной валюты).Итак, немного изменив ваш второй пример:

my_str = '<span class="price--content content--default">Jetzt:5.765,12&nbsp;€</span>'

Вывод должен быть целым 5.765,12.Итак, без использования регулярных выражений, я бы предложил:

for char in my_str:
if char.isdigit() or char =='.' or char==',':
    print(char, end ="")

Вывод:

5.765,12
0 голосов
/ 06 апреля 2019

Вы можете найти их с помощью регулярного выражения.Например,

import re
string1 = '\nIhr Preis:\n13.815,00\xa0€\n'
string2 = '\nIhr Preis:\n5.765,00&nbsp;€\xa0€\n'
my_num = re.findall(r'\d+\.\d+', string1)   # or string2
print(my_num)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...