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
if contexto.startswith('!noticias'): 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
def Web(): while 1: try: f = urllib2.urlopen("http://www.paginadenoticias.com.ar") print f.read() SantiagoNoticias = f.read() f.close() break if ' | </span>' in SantiagoNoticias: CuentaNoticias = CuentaNoticias + 1 if 10 >= 5: #Esta linea es diferente, la puse asi para ver si puede funcionar el script ContenidoNoticia1 = SantiagoNoticias ContenidoNoticia2 = ContenidoNoticia1.find('</span>') + 7 InfoNoticia = ContenidoNoticia1[ContenidoNoticia2:ContenidoNoticia1.find('</p>')] s.send('PRIVMSG #Argentina : 5 %s \r\n' % TituloNoticia) s.send('PRIVMSG #Argentina : 2 %s \r\n' % InfoNoticia) except HTTPError, e: s.send('PRIVMSG #Argentina : Ha ocurrido un error en la conexion con la pagina web!') print e.code except URLError, e: s.send('PRIVMSG #Argentina : ERROR: La URL es incorrecta . . .') print e.reason except BaseException as err: 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!!