Chema Cortes este es mi codigo : from BeautifulSoup import BeautifulSoup import urllib,urllib2 from conexion import Conexion import codecs
def get_html(url_page="http://www.bolsamadrid.es/esp/mercados/fondos/htm/trenta100.htm"): proxy_h = urllib2.ProxyHandler({"http" : "http://pdlo...@hlg.uci.cu:paveling84074@100.0.0.1:3128"}) opener = urllib2.build_opener(proxy_h) urllib2.install_opener(opener) f = urllib2.urlopen(url_page) data = f.read() return data def parser_bolsa(html_page): conn = Conexion() #page = urllib.urlopen(url_page) html = BeautifulSoup(html_page) for incident1 in html('tr',bgcolor="#ffffff"): #if incident1.contents[5].contents == [u'RENTA VARIABLE NACIONAL']: gestora = incident1.contents[1].contents[0] fondo = str(incident1.contents[3].contents[0]) ini = fondo.find(')\">')+3 fin = fondo.find('</a>') fondo = fondo[ini:fin] ultimo = incident1.contents[9].contents[0] fecha = str(incident1.contents[7].contents[0]) fecha = fecha[6:10]+"-"+fecha[3:5]+"-"+fecha[0:2] patrim = str(incident1.contents[15].contents[0]) participes = str(incident1.contents[17].contents[0]) vocacion = incident1.contents[5].contents[0] sql = "INSERT INTO `bolsa` (`id`, `gestora`,`vocacion`,`fecha`,`ultimo`,patrim,`participes`) VALUES(NULL,'%s','%s','%s','%s','%s','%s');" %(gestora,vocacion,fecha,ultimo,patrim,participes) conn.cursor.execute(sql) #print gestora,fondo,vocacion,fecha,ultimo,patrim,participes #else: #pass html_page = get_html() parser_bolsa(html_page) *******************Error que me da******************************************************************* Traceback (most recent call last): File "/home/pavel/workspace/bolsa/src/aplication/parser.py", line 42, in <module> parser_bolsa(html_page) File "/home/pavel/workspace/bolsa/src/aplication/parser.py", line 36, in parser_bolsa conn.cursor.execute(sql) File "/usr/lib/pymodules/python2.6/MySQLdb/cursors.py", line 149, in execute query = query.encode(charset) UnicodeEncodeError: 'latin-1' codec can't encode character u'\u0144' in position 121: ordinal not in range(256) **************************************************************************************************** PD: En el adjunto esta el script de la base de datos es una sola tabla **************************************************************************************************** De: "Chema Cortes" <pych...@gmail.com> Enviados: Lunes, 7 de Marzo 2011 5:20:29 Asunto: Re: [Python-es] error al decodificar unicode Bueno, al menos vemos que hay una parte que funciona. No entiendo el resto del código que pones pues 'codecs.open' es para manejar ficheros de texto y no tiene sentido el modo como lo usas. Pero de lo que comentas, parece que ya tienes la cadena unicode y donde te surgen los problemas es en la introducción de la cadena en la base de datos (que no sabemos cuál es). De lo que dije sobre unicode y python habría que añadir un corolario sobre lo que pasa con las bases de datos (me centraré más en oracle ya que, haciendo honor a su nombre, es la más esotérica de todas): - Tablas: del mismo modo que los ficheros de texto, las tablas utilizan una codificación de caracteres que es fijada en el momento de su creación. Un problema frecuente proviene de considerar como tamaño de campo el número de bytes y no el número de caracteres. El tamaño de una cadena codificada en utf8 es posible que no quepa en un tamaño de campo pensando para una cadena ascii. En oracle se puede dar tamaños de campos en bytes o en chars, recomendando usar chars como medida de tamaño. - Cliente-Servidor: cuando se estable una conexión con la base de datos, el canal también usa una codificación de caracteres. Esta codificación se puede fijar como un parámetro de la conexión, con excepción en oracle que lo toma desde una variable de entorno. Para utf8 y español sería definir la siguiente variable: NLS_LANG=SPANISH_SPAIN.AL32UTF8 Espero que ésto te sea de alguna ayuda. Deberías precisar mejor el problema, con parte de código "concreto" que usas y el texto del "error" que te da. > > ya probe con hacer esto dentro de mi funcion > def > get_html(url_page="http://www.bolsamadrid.es/esp/mercados/fondos/htm/trenta100.htm"): > > proxy_h = urllib2.ProxyHandler({"http" : > "http://pdlo...@hlg.uci.cu:paveling84074@100.0.0.1:3128"}) > opener = urllib2.build_opener(proxy_h) > urllib2.install_opener(opener) > f = urllib2.urlopen(url_page) > > data = f.read() > data = codecs.open(data) #Esto > return data > y me saca todo el codigo de la pagina y la otra funcion a la cual le paso lo > que tengo en data, ahora no hace nada _______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
-- phpMyAdmin SQL Dump -- version 3.3.2deb1 -- http://www.phpmyadmin.net -- -- Servidor: localhost -- Tiempo de generación: 07-03-2011 a las 07:53:46 -- Versión del servidor: 5.1.41 -- Versión de PHP: 5.3.2-1ubuntu4.5 SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; -- -- Base de datos: `informacion` -- -- -------------------------------------------------------- -- -- Estructura de tabla para la tabla `bolsa` -- CREATE TABLE IF NOT EXISTS `bolsa` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `gestora` varchar(50) NOT NULL, `vocacion` varchar(50) NOT NULL, `fecha` date NOT NULL, `ultimo` varchar(50) NOT NULL, `patrim` varchar(50) NOT NULL, `participes` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=310 ;
_______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/