elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Python (Moderador: Danielㅤ)
| | |-+  [Python] Duda con comparacion de cadenas en una lectura de socket
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Python] Duda con comparacion de cadenas en una lectura de socket  (Leído 3,304 veces)
Príncipe_Azul

Desconectado Desconectado

Mensajes: 21


while (1):


Ver Perfil WWW
[Python] Duda con comparacion de cadenas en una lectura de socket
« en: 4 Noviembre 2013, 07:34 am »

Hola! Estoy aprendiendo programacion Python y he creado un bot para el IRC, solo dispone de 4 funciones, pero me hes útil por lo menos para empezar y entenderle un poco al lenguaje.
Mi duda es la siguiente:
¿Cómo puedo comparar códigos HTML en una lectura de sockets con algunas variables?
Es decir lo que quiero que mi bot haga es esto, por ejemplo pondre 12 lineas de código de ejemplo:

Código:
<div class="nota clearfix" id="notafinal">
<div class="volanta">PROYECTO APROBADO POR UNANIMIDAD EN EL CONCEJO DELIBERANTE DE LA CAPITAL</div>
<h2><a href="/notas/2013/10/30/proponen-ensenar-ninos-lengua-senas-487696.asp" >Proponen enseñar a los niños la lengua de señas</a></h2>

<div class="fotoNota" id="w300"><a href="/notas/2013/10/30/proponen-ensenar-ninos-lengua-senas-487696.asp" ><img
src="/fotografias/portada/300-171984.jpg" alt="Proponen enseñar a los niños la lengua de señas" width="300" border="0" /></a>
<p class="epigrafe">Los ediles tuvieron una rápida sesión y aprobaron todos los proyectos.</p>
</div>
<div><p><span class="hora">30/10/2013 | </span>Se busca integrar a las personas sordomudas. Un desafío para los jardines de infantes.</p></div>
<div class="comentarios"><a href="/notas/2013/10/30/proponen-ensenar-ninos-lengua-senas-487696.asp#comentarios" >Dejá tu
comentario</a></div>

Lo que yo quiero es que mi bot extraiga informacion de una pagina web de noticias de mi provincia y la envíe al canal principal de la Red.
El código que hice para que el bot detecte el comando es este (voy a poner solo un pedazo de código):

Código
  1. if contexto.startswith('!noticias'):
  2.    Web()

Entonces un usuario al ejecutar el comando !noticias el script llama a la función Web
Y el código de la función es así:

Código
  1. def Web():
  2.    while 1:
  3.        try:
  4.            f = urllib2.urlopen("http://www.paginadenoticias.com.ar")
  5.            print f.read()
  6.            SantiagoNoticias = f.read()
  7.            f.close()
  8.            break
  9.            if ' | </span>' in SantiagoNoticias:
  10.                CuentaNoticias = CuentaNoticias + 1
  11.                if 10 >= 5: #Esta linea es diferente, la puse asi para ver si puede funcionar el script
  12.                    ContenidoNoticia1 = SantiagoNoticias
  13.                    ContenidoNoticia2 = ContenidoNoticia1.find('</span>') + 7
  14.                    InfoNoticia = ContenidoNoticia1[ContenidoNoticia2:ContenidoNoticia1.find('</p>')]
  15.                    s.send('PRIVMSG #Argentina : 5 %s \r\n' % TituloNoticia)
  16.                    s.send('PRIVMSG #Argentina : 2 %s \r\n' % InfoNoticia)
  17.        except HTTPError, e:
  18.            s.send('PRIVMSG #Argentina : Ha ocurrido un error en la conexion con la pagina web!')
  19.            print e.code
  20.        except URLError, e:
  21.            s.send('PRIVMSG #Argentina : ERROR: La URL es incorrecta . . .')
  22.            print e.reason
  23.        except BaseException as err:
  24.            exit()

Bueno creo que no es necesario pasar todo el código, además quiero hacer mi propio código y me estoy esforzando lo más que puedo para lograrlo, pero siempre necesitamos ayuda de alguien. Espero que sepan comprender.
Al ejecutar el programa, el bot entra al servidor, se loguea y todo bien, hasta incluso no cae obviamente no debe caer, osea me refiero a que responde los "PING's" del servidor cuando el mismo le envía.
Cuando un usuario ejecuta el comando !noticias el código llama a la función Web que ejecuta la tarea de abrir una página web, hasta ahí todo ok, luego veo en la consola todos los códigos de la página que por supuesto pasan demasiado rápido, pero logro ver el final del código, osea que abre bien la conexión y lee bien.
Pero el problema viene ahora, cuando intento comparar si la cadena  | </span> esta dentro de la línea del código HTML que vendría a ser lo mismo que el "isin" de mIRC Scripting, osea si la cadena A se encuentra dentro de la cadena B.
Lo que quiero es que el código trate de guardar en una variable este valor por ejemplo:

Código:
		<div><p><span class="hora">30/10/2013 | </span>Se busca integrar a las personas sordomudas. Un desafío para los jardines de infantes.</p></div>

Eso es una sola línea y por eso utilicé el ' | </span>' y sería si esa cadena esta (in) en la linea SantiagoNoticias de ser así que guarde en otra variable el contenido de esa cadena para poder quitarle los códigos HTML innecesarios y quedarme solo con la info, osea con la noticia.
He probado poniendo un print "hola" para ver si en cada línea que me mostraba la consola de python aparecían esos "hola", pero sólo apareció al final. Algo así:

</html>
hola

Osea que jamás se va a poder comparar porque es como si fuera que la lectura del socket es de un tirón y se saltara el bucle.
He probado varias maneras pero no consigo hacer que se comparen esas cadenas, en realidad son varias (3), pero solo puse de ejemplo una.
Amigos yo solo quiero por ahora algo basico, osea que compare la información que va extrayendo de la web con una cierta cadena, eso nada más, no creo que sea necesario instalar alguna librería, creo que con las que trae Python es suficiente para lo que necesito, solo es una comparacion de cadenas de textos.
Por favor espero que me ayuden, desde ya les agradezco.
Buena suerte!! :)


« Última modificación: 4 Noviembre 2013, 07:49 am por Principe_Azul » En línea

Foro de Ayuda de Programación General, IRC y mIRC Scripting: 
0x5d

Desconectado Desconectado

Mensajes: 241



Ver Perfil WWW
Re: [Python] Duda con comparacion de cadenas en una lectura de socket
« Respuesta #1 en: 7 Noviembre 2013, 02:32 am »

Hola, que bien que aprendas Python, es hermoso !


Tendrás que aprender a usar la librería "import re" y usar expresiones regulares para extraer la información, es la manera más simple!

PD: Yo uso import re, con la función re.findall(pattern, variable)

Saludos.


En línea

Príncipe_Azul

Desconectado Desconectado

Mensajes: 21


while (1):


Ver Perfil WWW
Re: [Python] Duda con comparacion de cadenas en una lectura de socket
« Respuesta #2 en: 8 Noviembre 2013, 08:39 am »

Hola 0x5d, gracias por responder :)
Yo soy programador de mSL (mIRC Scripting Language) y he aprendido muchísimo con ese lenguaje y la verdad que he creado muy buenos addons para mIRC, pero el gran problema es que tenés que tener la pc todo el día para que el bot o el addon funcione, así que me decidí a aprender otro lenguaje, a mi me gusta Python, C, Batch, mSL y TCL, pero había visto códigos de esos lenguajes y me quedé con Python porque me pareció más fácil y me gustó más.

Recién estoy empezando con Python y ya pude terminar mi bot de noticias exitosamente gracias a 2 personas que me ayudaron!!
El problema era que me faltaba una variable, osea la variable CuentaNoticias dentro de la función LeeHTML y con eso pude solucionar mi problema, ya que la variable estaba en otro lado y pensaba que el valor de ella que es 0 se mantenía ahí, pero no, las variables funcionan en cada función/bucle/condición etc... Osea no se pueden declarar variables globales/fijas
De todas maneras les agradezco a todos, muchas gracias y que tengan un buen día!!
Buena suerte!! : )
En línea

Foro de Ayuda de Programación General, IRC y mIRC Scripting: 
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Comparación de cadenas (string)
Programación Visual Basic
el_lichal 4 2,651 Último mensaje 17 Noviembre 2005, 18:40 pm
por el_lichal
comparacion de cadenas « 1 2 »
Programación C/C++
m@o_614 10 6,778 Último mensaje 19 Febrero 2012, 18:11 pm
por Sagrini
Comparación de cadenas « 1 2 »
Programación C/C++
kaostias 10 5,857 Último mensaje 24 Octubre 2013, 16:05 pm
por kaostias
[Duda] Como podría comparar 2 cadenas en Python
Scripting
Proxmond 2 16,712 Último mensaje 14 Julio 2014, 03:58 am
por Proxmond
[Duda] - Tratamiento de dos cadenas y comparacion
.NET (C#, VB.NET, ASP)
dont'Exist 3 2,674 Último mensaje 13 Abril 2017, 21:52 pm
por dont'Exist
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines