Что мне делать с этой ошибкой в ​​Python

# -*- coding: cp949 -*-

import urllib.request
import re
url="http://google.co.kr"
value=urllib.request.urlopen(url).read()
par='<title>(.+?)</title>'
result=re.findall(par,value)
print(result)

В этом коде я встретил ошибку в строке 8

"TypeError: can't use a string pattern on a bytes-like object" And
"File"C:\Python34\lib\re.py", line 210, in findall"

Помоги мне, пожалуйста.


person 강병찬    schedule 28.07.2015    source источник
comment
не могли бы вы распечатать type(value)   -  person The6thSense    schedule 28.07.2015
comment
возможный дубликат Python TypeError в регулярном выражении   -  person Andersson    schedule 28.07.2015
comment
@VigneshKalai Это ‹класс «байты»›   -  person 강병찬    schedule 28.07.2015
comment
@Андерсон ты прав   -  person The6thSense    schedule 28.07.2015
comment
@ Андерссон Спасибо. Как это исправить?   -  person 강병찬    schedule 28.07.2015
comment
@VigneshKalai Спасибо. Как это исправить?   -  person 강병찬    schedule 28.07.2015
comment
par=b'<title>(.+?)</title>' вы должны использовать байтовое регулярное выражение для байтового объекта. Это можно сделать, добавив b   -  person The6thSense    schedule 28.07.2015
comment
@VigneshKalai Спасибо!!! Эта ошибка была решена.   -  person 강병찬    schedule 28.07.2015


Ответы (1)


urllib.request.urlopen().read() возвращает строку байтов. Вам нужно будет decode() получить строку, пример -

value=urllib.request.urlopen(url).read().decode('cp949')

Используется cp949, так как вы, кажется, используете это в своем заголовке - # -*- coding: cp949 -*- , вы можете использовать любую кодировку, которую хотите, вы также можете оставить ее пустой, чтобы она декодировалась с использованием кодировки по умолчанию.

person Anand S Kumar    schedule 28.07.2015