No se puede usar un patrón de cadena en un objeto similar a un byte – re error de python

Estoy haciendo el desafío de python y tratando de familiarizarme con python, así que sin mirar las respuestas, traté de usar el lector url de python para leer el html y luego encontrar las letras necesarias. Sin embargo, en el código que aparece a continuación obtengo un error, que originalmente era el urllib.request de python 3, pero después de resolverlo recibo un nuevo error:

 print ("".join(re.findall("[A-Za-z]", data))) File "C:\Python34\lib\re.py", line 210, in findall return _compile(pattern, flags).findall(string) TypeError: can't use a string pattern on a bytes-like object 

Ahora intenté buscar este error en google, pero todo lo que obtuve fue sobre json, que no debería necesitar. Mi python no es tan fuerte, ¿entonces tal vez estoy haciendo esto incorrectamente?

 #Question 2 - find rare characters import re import urllib.request data = urllib.request.urlopen("http://www.pythonchallenge.com/pc/def/ocr.html") mess = data.read() messarr = mess.split("--") print ("".join(re.findall("[A-Za-z]", data))) #Question 3 - Find characters in list page = urllib.request.urlopen("http://www.pythonchallenge.com/pc/def/equality.html") mess = page.read() messarr = mess.split("--") print ("".join(re.findall("[^AZ]+[AZ]{3}([az])[AZ]{3}[^AZ]+", page))) 

El problema es que estás mezclando bytes y cadenas de texto. Debe decodificar sus datos en una cadena de texto (unicode), por ejemplo, data.decode('utf-8') , o usar un objeto de bytes para el patrón, por ejemplo re.findall(b"[A-Za-z]") (note la letra b antes del literal de cadena).