[SOLUCIONADO] Se puede insertar datos de un for en la bd, saliendose del for?

Iniciado por juliianc95, Diciembre 22, 2013, 02:56:31 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Diciembre 22, 2013, 02:56:31 AM Ultima modificación: Diciembre 28, 2013, 06:56:50 PM por Expermicid
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
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
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.


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?

No tienes permitido ver los links. Registrarse o Entrar a mi 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

            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
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
genero = ", ".join(genero)


justo despues de la línea:

Código: python
genero = pattern.findall(htmlstring)


Saludos!







No tienes permitido ver los links. Registrarse o Entrar a mi 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 = No tienes permitido ver los links. Registrarse o Entrar a mi cuenta(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 = No tienes permitido ver los links. Registrarse o Entrar a mi cuenta(pattern, htmlstring).group(0)
AttributeError: 'NoneType' object has no attribute 'group'
Gracias de antemano.

No tienes permitido ver los links. Registrarse o Entrar a mi 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 = No tienes permitido ver los links. Registrarse o Entrar a mi cuenta(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 = No tienes permitido ver los links. Registrarse o Entrar a mi cuenta(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
        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!







No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

ve tengo el siguiente codigo que me distes:
Código: php

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ódigo: php

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


gracias

listo problema resuelto tenia que quitar el for y hacer lo que me habias dicho. gracias