Извлечение некоторых чисел из байтовых данных

Я новичок в веб-скрейпинге. После очистки некоторых веб-сайтов с помощью этих строк:

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&nbsp;</span></li>'

In [15]:print(x2)
b'<li><span class = "Price up2">0.059&nbsp;</span></li>'

In [16]:print(x3)
b'<li><span class = "Price down2">0.079&nbsp;</span></li>'

Типы данных x1, x2 и x3 являются байтами. Я хочу извлечь 0,071, 0,059, 0,079 как числа с плавающей запятой из x1, x2 и x3. Каков питонический способ сделать это?

заранее спасибо

Обновлено: для лучшей презентации

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
34
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать регулярные выражения:

import re
x1_extracted = re.findall('(?<=>)\d+\.*\d*', x1.decode('utf-8'))
x1_extracted = float(x1_extracted[0])

Во-первых, вам нужно декодировать последовательность байтов (преобразовать ее из байтов в строку. Я предполагаю, что кодировка utf-8). Затем вы можете использовать модуль re, чтобы найти значения. Пошагово это выражение означает: найти одну или несколько цифр (\d+), за которыми может следовать точка (\.*) и, возможно, еще несколько цифр (\d*). Все это должно предваряться > ((?<=>)).

Спасибо. Интересно знать, что регулярное выражение может обрабатывать байтовые данные и что после вывода регулярного выражения это объект списка.

mathguy 24.06.2019 05:50
x1.decode('utf-8') преобразует x1 в строку, поэтому он обрабатывает строку, также посмотрите документы найти все, чтобы узнать больше об этом.
Devesh Kumar Singh 24.06.2019 05:57

спасибо, что показали мне, как декодировать тип байта в данные строкового типа

mathguy 24.06.2019 06:06

Другие вопросы по теме