Dedicado a mis proyectos en Gambas ,un lenguaje de programación parecido al Visual Basic + Java pero ampliamente mejorado y...¡¡para gnu/linux!!.La potencia del gnu/linux sumada a la facilidad del Basic



Consultas, Desarrollo de programas y petición de presupuestos:



Mostrando entradas con la etiqueta extraer. Mostrar todas las entradas
Mostrando entradas con la etiqueta extraer. Mostrar todas las entradas

jueves, 15 de junio de 2017

webscraping ¿Como extraer datos de páginas web con Python? Ejemplo con página de apuestas



webscraping 

 ¿Como extraer datos de páginas web con Python?





En python tenemos varias librerías que nos facilitan la extracción de datos de páginas web. En el ejemplo que sigue voy a usar las siguientes:

  • requests (que es la que se encarga de leer la página web) 
  • beatifulsoup4 ( https://www.crummy.com/software/BeautifulSoup/ ) que es la que tiene las herramientas para extraer la información.


Para instalarlas, usa los siguientes comandos.


$ pip install beautifulsoup4
$ pip install requests

Ejemplo:
Trataremos de extraer los datos de la página web www.maratonbet.es de un partido "en vivo", que nos muestre datos del tipo: tiempo, resultado, y las cuotas de los mercados más importante (resultados). En programa necesita que se le pase en la linea de comando un parámetro con la url de la pagina web a analizar.

En el siguiente enlace podéis descargar el código del programa: alojado en google drive


Análisis del código:

1) Importando librerias
from bs4 import BeautifulSoup
import requests
import sys
Importamos las librerías que vamos a usar en la aplicación. La librería "sys" es necesaria para leer los argumentos de la linea de comandos.
2) Análisis de argumentos

if len(sys.argv)>=2:

  Hacemos una comprobación sobre el numero de argumentos. Si hay 2 o más seguimos ejecutando el programa, sino escribiremos en la consola que faltan argumentos:
else:
print "Falta argumento: url de la página mbet a analizar";

3) Cuerpo principal del programa:
3.1) Leer la url del argumento de la linea de comando y cargar página web:
URL=sys.argv[1]

req = requests.get(URL)

3.2) Una vez cargada empezamos con crear un objeto BeautifulSoup con el texto extraido:

html = BeautifulSoup(req.text, "html.parser")


3.3) Extraigo el resultado y el tiempo del encuentro.

resultadoytiempo=html.find('td',{'class':'event-description'})

Nota: Anteriormente he analizado la página web de los encuentros en directo de mbet, y he visto como esta formado la página web, etiquetas tipo table, td, div, class, que usa página web para mostrar la información.
Imprimo el resultado y tiempo:

print " %s " %resultadoytiempo.getText()


3.4) Proceso entradas de resultados:
Las etiquetas "div" que usan la case "nowrap simple-price", contienen datos del mercado y cuota a la que estan referidas. Con la siguiente instrucción, consigo un array con estos datos.


entradas = html.find_all('div', {'class': 'nowrap simple-price'})


Ahora con un bucle for, voy extrayendo los datos del mercado dentro de cada elemento de "entradas"

for i, entrada in enumerate(entradas):
# Con el método "getText()" no nos devuelve el HTML
equipo1 = entrada.find('span', {'class': 'left-simple'}).getText()
cuota1= entrada.find('span', {'class': 'right-simple'}).getText()

Y los imprimo en pantalla:
# Imprimo el equipo/resultado y cuota
print "%d - %s | %s " % (i + 1, equipo1, cuota1)


Pantallazo de uso y salida del script:



Vídeo de uso de la aplicación:




Saludos


Fuentes y Documentación Extra:
https://jarroba.com/scraping-python-beautifulsoup-ejemplos/
https://www.crummy.com/software/BeautifulSoup/
https://es.slideshare.net/ecrespo/webscraping



miércoles, 8 de agosto de 2012

Flash: El programa ExtractorSWF para extraer videos y ficheros de imagen automaticamente


En la entrada anterior , http://jsbsan.blogspot.com.es/2012/08/juegos-flash-extraer-graficos-y-musica.html, explique como usar la herramienta  swfextrac, de http://www.swftools.org/about.html, para extraer los ficheros .png, .jpg y .mp3

Esta herramienta, tiene un  inconveniente,  solo extrae los archivos que le indiquemos.

Pues bien, he realizado este programa "ExtractorSWF.gambas", en gambas3.2, que extrae todo el contenido de las imágenes y sonido automáticamente

   Enlace de descarga del código fuente: (new!! : version 0.0.46)
                   https://www.box.com/s/eef85c1114e1726ae4ef

   Enlace de descarga del ejecutable .gambas:
                    https://www.box.com/s/e4bea92b40c7187fca55


Para ello crea 3 directorios, respectivamente:

/tmp/contenido.png

/tmp/contenido.jpg
/tmp/contenido.mp3

El los extrae los archivos del fichero .swf, que le indiquemos.

He elegido ese directorio /tmp ya que alli se almacena "temporalmente" los archivos en cada sección y se borran al apagar el ordenador. Los archivos que nos interesen los debemos copiar a otro directorio, por ejemplo con el nautiulus, para no perderlos.


Forma de usarlo de uso en la terminal o consola:
./ExtractorSWF.gambas nombre_del_archivo.swf

Nota:
hay que darle al fichero .gambas, los permisos de ejecución:
sudo chmod +x ExtractorSWF.gambas


Ejemplo
./ExtractorSWF.gambas Back2Back.swf



Saludos.


Notas:
9/8/2012
versión 0.0.46: Mejorado la forma en que lee los archivos, ya que en algunos juegos, no leia bien los datos








martes, 7 de agosto de 2012

Juegos Flash: Extraer gráficos y música...




Últimamente he visto varios juegos tipo flash, y algunos, con buenos gráficos y banda sonora...

He estado buscando la forma de poder "extraer" la información del juego...estos son los pasos a seguir:


1º Paso: Descargar el juego

1.1) Usar el navegador Firefox, abriremos la página que contenga el juego flash que queremos descargar, esperar que se descargue completamente y  debemos apretar el botón derecho del mouse en cualquier parte de la página alrededor del juego. Al hacer esto se desplegará un menú donde deberemos hacer click sobre la opción “ver información de la página” 

1.2)  Al hacer click sobre la opción anterior aparecerá el menú de la siguiente imagen donde deberemos hacer click en la pestaña “medios” 

1.3) Aparece una lista de componentes entre los cuales deberemos encontrar un archivo de extensión .swf que puede ser clasificado como “objeto” o “anidado” o "embed" según como esté programada la pagina web. En este caso el juego aparece como "embed".
Cuando encuentres el juego flash ( .swf)  en la página hacemos click sobre él y se sombrea.


1.4) El paso final consiste en apretar el botón “Guardar Como” (en mi caso "Save As") que aparece abajo a la derecha y escoger el sitio donde descargaremos nuestro juego flash favorito. 


2) Instalar la aplicación swftools

Este programa es un conjunto de herramientas que nos ayudaran a trabajar con ficheros flash, el linux.
Lo descargamos, descomprimimos y compilamos:

wget http://swftools.org/swftools-0.9.0.tar.gz

Nota:
Tambien se puede descargar desde la pagina web http://www.swftools.org/about.html


tar -zvxf swftools-0.9.0.tar.gz


sudo ./configure

sudo make

sudo make install


3) Decodificando:

La herramienta que usamos se llama swfextrac (que se instala cuando instalamos swftools).
Es muy sencilla de usar, por ejemplo, para que nos de información sobre el fichero flash:

swfextract nombre_juego.swf

En mi caso:
swfextract  battlegear2.swf 

Genera una salida como esta (o mayor, según las imágenes contenidas en el juego):


Objects in file battlegear2.swf:
 [-i] 1264 Shapes: ID(s) 1, 3, 6, 14
 [-i] 835 MovieClips: ID(s) 2, 4, 7, 11
 [-j] 689 JPEGs: ID(s) 5, 13, 133, 153
 [-p] 38 PNGs: ID(s) 157, 291, 359, 511, 680, 681, 683, 701, 702, 744, 747, 843, 931, 990, 1037, 1039, 1138-1140, 1148, 1198, 1200, 1202, 1204, 1206, 1504, 1639, 1640, 1856, 2238, 2240, 2242, 2474, 2475, 2508, 2510, 2516, 2648
 [-s] 38 Sounds: ID(s) 2709-2746
 [-f] 1 Frame: ID(s) 0
 [-m] 1 MP3 Soundstream


Para ayudarte a entender la información, puedes ver la ayuda de swfextract usando el parametro -h

# swfextract -h
Usage: swfextract [-v] [-n name] [-ijf ids] file.swf
-v , --verbose Be more verbose
-o , --output filename set output filename
-V , --version Print program version and exit

SWF Subelement extraction:
-n , --name name instance name of the object (SWF Define) to extract
-i , --id ID ID of the object, shape or movieclip to extract
-f , --frame frames frame numbers to extract
-w , --hollow hollow mode: don't remove empty frames
            (use with -f)
-P , --placeobject Insert original placeobject into output file
            (use with -i)
SWF Font/Text extraction:
-F , --font ID Extract font(s)
Picture extraction:
-j , --jpeg ID Extract JPEG picture(s)
-p , --pngs ID Extract PNG picture(s)

Sound extraction:
-m , --mp3 Extract main mp3 stream
-s , --sound ID Extract Sound(s)



Por ejemplo, para extraer una imagen:
swfextract -p 
359
 battlegear2.swf -o  
359
.png

Para extraer el sonido:
swfextract -s 
2709-2746  
battlegear2.swf -o banda.mp3


Espero que os sea útil... Saludos.

Nota:
Ir descargando archivo por archivo, es un poco "paliza", en la próxima entrega mostraré un programa realizado en gambas para la extracción completa de todas las imágenes y sonidos.



Fuentes:
http://www.taringa.net/posts/hazlo-tu-mismo/5692923/como-descargar-juegos-flash.html
https://designbye.wordpress.com/2010/02/23/installing-swftools-and-pdf2swf-on-ubuntu-linux/
http://www.glatelier.org/2011/01/destripando-instants-chile-get-prueba-de-concepto/