forte74 Ответов: 1

Не использовать шаблон строку на байты-как объект в Python


У меня есть программа на python, которая загружает биржевые данные для акций с символом AAPL. Когда я запускаю этот код, я получаю
cannot use a string pattern on a bytes-like object  in python
.


import urllib

import re


import urllib.request as ur
s = ur.urlopen("http://finance.yahoo.com/quote/q?s=AAPL&ql=1")
sl = s.read()
print(sl)

#htmlfile = urllib.openurl("http://finance.yahoo.com/quote/q?s=AAPL&ql=1")


htmltext = s.read()


regex = '<span class="Fw(b) Fz(36px) Mb(-4px)">(.+?)</span>'
pattern  = re.compile(regex)

price = re.findall(pattern, htmltext)


print  (price)


Что я уже пробовал:

**********************************************************************************************************-----------------------------------------------------------------------------------------------------------------------------------------------------

1 Ответов

Рейтинг:
1

Jochen Arndt

Объект, возвращаемый urlopen() является байтовым объектом, потому что urlopen() не удается определить кодировку байтового потока. Сначала вы должны определить кодировку (динамически или используя фиксированную, когда знаете ее) и декодировать данные.

Пример для UTF-8:

htmltext = s.read().decode('utf-8')


Кодировка часто указывается в charset аргумент а Content-type заголовок. К этому можно получить доступ с помощью s.info().get_content_charset() или s.headers.get_content_charset() Так что вы можете сначала проверить это и использовать его, если нет None.