[pyar] Desarrollo rápido de un miniparser muy básico

Gustavo Campanelli gedece en gmail.com
Dom Mar 20 20:19:45 ART 2011


Bueno, estuve intentando hacer data mining de una página llamada
Ragial.com, que lleva estadísticas de objetos en venta del servidor
gratuito y legal Valkirye de Ragnarok Online, y en menos, mucho menos
de un día, porque fue hoy con muchas pero muchas interrupciones y
paradas largas para ver películas, armé algo que no es realmente un
parser en regla, porque solo examina unos pocos pasos.

Sin embargo quería compartirlo porque me gustó como quedó la parte
donde elimino los tags de la página HTML. Obvio que hay mejores
maneras e incluso hay parsers dedicados, pero realmente esta forma me
parecía más interesante desde el punto de vista del desafío de
pensarla, y no es que fuera tremendamente complicada, pero bueno, así
con pequeños desafíos es que vamos empujando lo que sabemos siempre
para adelante.

Si lo desean probar, solo armen un archivo llamado 'Articulos
Ragial.txt', e incorporen datos con la estructura 'Nombre del
artículo' 'TAB' 'Código de Ragial para el Arículo'. Como ejemplo, les
dejo este ya armado:  Buche De Noel	HbXm5a42iCcv

#!/usr/bin/python
import time
import urllib2

def Titulo():
	final = QuitaTags(renglon)
	print final[0]

def Promedios():
	final = QuitaTags(renglon)
	print final [0] + ' Min. ' + final[2] + ' Max. ' + final[3] + ' Prom.
' + final[4] + ' Desviacion +- ' + final[5].split(';')[1]
	
def Precios():
	final = QuitaTags(renglon)
	print final[0] + ' ' + final[1] + ' ' + final[2]
	print final[4] + ' ' + final[5] + ' ' + final[6]
	print final[8] + ' ' + final[9] + ' ' + final[10]
	print final[12] + ' ' + final[13] + ' ' + final[14]
	print final[16] + ' ' + final[17] + ' ' + final[18] + '\n'
	
	
def QuitaTags(original):
	letras = list(original)
	result = []
	stop = 0
	palabra = ''
	for letra in letras:
		if letra == '<':
			stop = 1
			if palabra <> '':
				result.append(palabra)
				palabra = ''
		if stop == 0:
			if letra <> '\t':
				palabra = palabra + letra
		if stop == 1:
			if letra == '>':
				stop = 0
	return result

datafile = open('Articulos Ragial.txt','r')
itemlist = datafile.readlines()
datafile.close()
baseurl = 'http://ragial.com/item/iRO-Valkyrie/'

for item in itemlist:
	if item[0] <> '#':
		texto  = item.split('	')
		finalurl = baseurl + texto[1]
		webhandle = urllib2.urlopen(finalurl)
		price = webhandle.read()
		webhandle.close()
		tweb = price.split('\n')
		for renglon in tweb:
			if renglon.find('<title>') <> -1:
				Titulo()
			if renglon.find('Short') <> -1 or renglon.find('Long') <> -1:
				Promedios()
			if renglon.find('<tr class="odd">')<> -1:
				Precios()
		time.sleep(1)
	
	
Gedece



More information about the pyar mailing list