Después de las operaciones que ha realizado, verá:
>>> req.headers['content-type']
'text/html; charset=windows-1251'
y así:
>>> encoding=req.headers['content-type'].split('charset=')[-1]
>>> ucontent = unicode(content, encoding)
ucontent
es ahora una cadena Unicode (de 140655 caracteres) - así por ejemplo para mostrar una parte de ella, si su terminal es UTF-8:
>>> print ucontent[76:110].encode('utf-8')
<title>Lenta.ru: Главное: </title>
y se puede buscar, etc, etc.
Edición: Unicode I/O suele ser complicado (esto puede ser lo que está reteniendo el asker original) pero voy a eludir el difícil problema de ingresar cadenas Unicode a un intérprete interactivo de Python (sin relación con la pregunta original)) para mostrar cómo, una vez que se ingresa correctamente una cadena Unicode (lo hago por puntos de código - tonto pero no complicado ;-), la búsqueda es absolutamente obvia (y espero que la pregunta original haya sido completamente respondida). asumiendo de nuevo un terminal UTF-8:
>>> x=u'\u0413\u043b\u0430\u0432\u043d\u043e\u0435'
>>> print x.encode('utf-8')
Главное
>>> x in ucontent
True
>>> ucontent.find(x)
93
Nota: Tenga en cuenta que este método puede no funcionar para todos los sitios, ya que algunos sitios sólo especifican la codificación de caracteres dentro de los documentos servidos (utilizando etiquetas meta http-equiv , por ejemplo).
La codificación se realiza utilizando una función de la biblioteca urllib no de urllib2. De http://www.voidspace.org.uk/python/articles/urllib2.shtml#headers – Macarse
@Macarse esta no es la codificación a la que se refiere Vitaly, se refiere a la decodificación y codificación del contexto de solicitud real con '[byte string] '. decode (' [charset] ') y u' [cadena unicode] '. encode (' utf-8 '). Se refiere a los parámetros de solicitud de codificación. –
relacionado: [Una buena forma de obtener el conjunto de caracteres/codificación de una respuesta HTTP en Python] (http://stackoverflow.com/q/14592762/4279) – jfs