Я новичок в веб-скрейпинге. После очистки некоторых веб-сайтов с помощью этих строк:
x1 = urllib.request.urlopen('somewebsite1').read()
x2 = urllib.request.urlopen('somewebsite2').read()
x3 = urllib.request.urlopen('somewebsite3').read()
У меня есть следующие данные:
In [14]:print(x1)
b'<li><span class = "Price down2">0.071 </span></li>'
In [15]:print(x2)
b'<li><span class = "Price up2">0.059 </span></li>'
In [16]:print(x3)
b'<li><span class = "Price down2">0.079 </span></li>'
Типы данных x1, x2 и x3 являются байтами. Я хочу извлечь 0,071, 0,059, 0,079 как числа с плавающей запятой из x1, x2 и x3. Каков питонический способ сделать это?
заранее спасибо
Обновлено: для лучшей презентации
Вы можете использовать регулярные выражения:
import re
x1_extracted = re.findall('(?<=>)\d+\.*\d*', x1.decode('utf-8'))
x1_extracted = float(x1_extracted[0])
Во-первых, вам нужно декодировать последовательность байтов (преобразовать ее из байтов в строку. Я предполагаю, что кодировка utf-8). Затем вы можете использовать модуль re
, чтобы найти значения. Пошагово это выражение означает: найти одну или несколько цифр (\d+
), за которыми может следовать точка (\.*
) и, возможно, еще несколько цифр (\d*
). Все это должно предваряться >
((?<=>)
).
x1.decode('utf-8')
преобразует x1 в строку, поэтому он обрабатывает строку, также посмотрите документы найти все, чтобы узнать больше об этом.
спасибо, что показали мне, как декодировать тип байта в данные строкового типа
Спасибо. Интересно знать, что регулярное выражение может обрабатывать байтовые данные и что после вывода регулярного выражения это объект списка.