Меняется значение при записи в список python
Спарсил данные с Яндекса, с помощью BeautifulSoup4 получил элементы При записи чисел 2498, 2129, 1646, 1208 в список, строки меняются на такие значения: ''' ['2\u2009498', '2\u2009129', '1\u2009646', '1\u2009208'] ''' Но через 'print()' выводятся обычные числа типа 'str', что с этим можно сделать? Код:
def read_index():
metrics = []
with open(r'index.html', encoding='utf-8') as file:
src = file.read()
soup = BeautifulSoup(src, 'lxml')
for dataid in all_id.values():
try:
element = soup.find('tr', {'data-id': f'{dataid}'}).find(
class_='conversion-report__goal-metric-row_type_visits').find('td',
class_='conversion-report__goal-metric-row-right')
# metrics[key] = element.text
metrics.append(element.text)
print(element.text)
except Exception:
title = soup.find('tr', {'data-id': f'{dataid}'}).find(class_='conversion-report__goal-title')
# metrics[key] = ''
print(f'Ошибка в {title.text}')
print(metrics)
Ответы (2 шт):
\u2009 - это юникод codepoint для короткого пробела. Очевидно, в числах такое форматирование - тысячи отделяются коротким пробелом.
Убрать все пробелы из строки можно так:
x = '2\u2009498'
import re
x = re.sub('\s', '', x)
Они не меняются, они уже с тем символом, просто он выглядит как пробел '1 208'.
Этот символ использовался там как пробел, т.к. обычные пробелы в HTML могут быть игнорированы.
Когда вы выводили список, то строки там показывались строковыми представлениями (как если бы их через repr выводили):
s = '1 208'
print(s)
print(repr(s))
# 1 208
# '1\u2009208'
Вам нужно убрать ненужные символы, например:
s = '1 208'
s = ''.join(c for c in s if c in '0123456789')
print(s)
print(repr(s))
# 1208
# '1208'