Underc0de

Foros Generales => Dudas y pedidos generales => Mensaje iniciado por: juliianc95 en Diciembre 22, 2013, 02:56:31 AM

Título: [SOLUCIONADO] Se puede insertar datos de un for en la bd, saliendose del for?
Publicado por: juliianc95 en Diciembre 22, 2013, 02:56:31 AM
Buenas amigo mi problema es el siguiente. se que en el titulo no me explique mucho. pero en vd no sabia como preguntarles.

tengo el siguiente codigo:

Código (python) [Seleccionar]
try:
            regex = '<span itemprop=\"director\".+?><span itemprop=\"name\">(.+?)<\/span><\/a><\/span>'
            pattern = re.compile(regex, re.I | re.DOTALL | re.MULTILINE)
            temp_var = re.search(pattern, htmlstring).group(0)
            regex='<span class="ac.+?>(.+?)</span>'
            pattern = re.compile(regex, re.I | re.DOTALL | re.MULTILINE)
            temp_var2 = pattern.findall(temp_var)
            for director in temp_var2:
                print director


al yo imprimir director me lo da en la pantalla de python. pero al insertarlo en la base de datos me da este error.


Código (python) [Seleccionar]
Traceback (most recent call last):
  File "C:\Python27\BotSensaCine.py", line 346, in <module>
    sql = "INSERT INTO peliculas (poster,titulospain,titulo,anio,duracion,pais,estreno,idioma,director,protagonistas,distribuidora,genero,presupuesto,sinopsi,guionistas,musica,fotografia,trailer1,trailer2,tt1,tt2) VALUES (\"%s\",\"%s\",\"%s\", \"%s\", \"%s\", \"%s\",\"%s\", \"%s\", \"%s\", \"%s\",\"%s\", \"%s\", \"%s\", \"%s\",\"%s\", \"%s\", \"%s\", \"%s\", \"%s\",\"%s\", \"%s\")" %(re.escape(poster),re.escape(titulospain), re.escape(titulo), re.escape(anio), re.escape(duracion), re.escape(pais), re.escape(estreno), re.escape(idioma), re.escape(director), re.escape(protagonistas), re.escape(distribuidora) , re.escape(genero), re.escape(presupuesto), re.escape(sinopsi), re.escape(guionistas), re.escape(musica), re.escape(fotografia),re.escape(trailer1), re.escape(trailer2),re.escape(tt1), re.escape(tt2))
NameError: name 'director' is not defined



gracias de antemano.
Título: Re:se puede insertar los datos de un for en la base de datos, saliendose del for?
Publicado por: Once en Diciembre 22, 2013, 04:10:58 AM
¿Puedes poner el resto del código?

Saludos!
Título: Re:se puede insertar los datos de un for en la base de datos, saliendose del for?
Publicado por: juliianc95 en Diciembre 22, 2013, 07:37:32 PM
como el resto man? todo el bot?..
lo de expresiones regulares esta bien por que al imprimirlo con print no da error. pero al insertarlo en la base de datos me lanza el error.  que sera?
Título: Re:se puede insertar los datos de un for en la base de datos, saliendose del for?
Publicado por: Once en Diciembre 22, 2013, 11:48:50 PM
No tienes permitido ver enlaces. Registrate o Entra a tu cuenta
como el resto man? todo el bot?..
lo de expresiones regulares esta bien por que al imprimirlo con print no da error. pero al insertarlo en la base de datos me lanza el error.  que sera?

Sólo era necesario todo el bloque try. Pero ahora que tengo el código completo te puedo ayudar mejor.

Primero: El error te dice que la variable director no está definida.
Segundo: La variable director no está definida porque la expresión regular no encuentra coincidencias (no salta el except porque no ocurre un error) así que el for np define la variable director.
Tercero: La solución es un simple condicional:

Código (python) [Seleccionar]

            if temp_var2:
                for director in temp_var2:
                    print "director", director
            else:
                print "No hay director"
                director = "-"


Ahora,como sugerencia: no es necesario que recorras todo el resultado de la expresión regular porque la variable director sólo contendrá el último elemento. Así que puedes usar temp_var2[-1] si quieres el último resultado de la expresión regular.

El segundo error que te dará cuando ejecutes el código corregido será:

Código (python) [Seleccionar]
AttributeError: 'list' object has no attribute 'join'

El problema es que el valor de genero es una lista y el método re.escape() recibe como argumento un string, la solución que puedes implementar si quieres tener en la cadena todos los generos sería poner:

Código (python) [Seleccionar]
genero = ", ".join(genero)

justo despues de la línea:

Código (python) [Seleccionar]
genero = pattern.findall(htmlstring)

Saludos!
Título: Re:se puede insertar los datos de un for en la base de datos, saliendose del for?
Publicado por: juliianc95 en Diciembre 23, 2013, 06:09:16 PM
Gracias amigo. ahora otra ayudita aqui.
tengo el siguiente codigo
Citar
        regex = '<li><span class="film_info lighten fl">\nGénero</span>(.*?)<\/li>'
        pattern = re.compile(regex, re.I | re.DOTALL | re.MULTILINE)
        temp = re.search(pattern, htmlstring).group(0)
        print temp
me da el siguiente error
Citar
Traceback (most recent call last):
  File "C:\Python27\BotSensaCine.py", line 232, in <module>
    temp = re.search(pattern, htmlstring).group(0)
AttributeError: 'NoneType' object has no attribute 'group'
Gracias de antemano.
Título: Re:se puede insertar los datos de un for en la base de datos, saliendose del for?
Publicado por: Once en Diciembre 23, 2013, 06:16:59 PM
No tienes permitido ver enlaces. Registrate o Entra a tu cuenta
Gracias amigo. ahora otra ayudita aqui.
tengo el siguiente codigo
Citar
        regex = '<li><span class="film_info lighten fl">\nGénero</span>(.*?)<\/li>'
        pattern = re.compile(regex, re.I | re.DOTALL | re.MULTILINE)
        temp = re.search(pattern, htmlstring).group(0)
        print temp
me da el siguiente error
Citar
Traceback (most recent call last):
  File "C:\Python27\BotSensaCine.py", line 232, in <module>
    temp = re.search(pattern, htmlstring).group(0)
AttributeError: 'NoneType' object has no attribute 'group'
Gracias de antemano.

Es el mismo error de antes, la expresión regular no encuentra coincidencias así que regresa un objeto None. Simplemente agrega un condicional para verificar si la expresión regular encontro una coincidencia.

Código (python) [Seleccionar]
        regex = '<li><span class="film_info lighten fl">\nGénero</span>(.*?)<\/li>'
        pattern = re.compile(regex, re.I | re.DOTALL | re.MULTILINE)
        temp = re.search(pattern, htmlstring)
        if temp:
                print temp.group(0)


Saludos!
Título: Re:se puede insertar los datos de un for en la base de datos, saliendose del for?
Publicado por: juliianc95 en Diciembre 23, 2013, 07:40:04 PM
ve tengo el siguiente codigo que me distes:

try:
            regex = '<span itemprop=\"genre\">(.+?)<\/span><\/span>'
            pattern = re.compile(regex, re.I | re.DOTALL | re.MULTILINE)
            temp_var = pattern.findall(htmlstring)
            if temp_var:
                genero = ", ".join(genero)
                for genero in temp_var:
                    print genero
            else:
                genero = "-"
        except:
            genero = "-"

al insertar como me dijistes sale en la base de datos asi:


c,o,m,e,d,i,a


gracias
Título: Re:se puede insertar los datos de un for en la base de datos, saliendose del for?
Publicado por: juliianc95 en Diciembre 23, 2013, 07:49:38 PM
listo problema resuelto tenia que quitar el for y hacer lo que me habias dicho. gracias