Juego ejercicios [Python]

Iniciado por Masita, 21 Diciembre 2009, 03:04 AM

0 Miembros y 3 Visitantes están viendo este tema.

CaronteGold

Cita de: Novlucker en  8 Enero 2010, 13:56 PM
Me cachis!  >:(

No hay manera de que me tire lo que busco! pensé que quizás google había cambiado la manera en la que muestra resultados (y no eran accesibles), pero acabo de probar con otro lenguaje (vbs) y no tengo problemas en listar las imagenes!, pero en este caso, ponga lo que le ponga (cambiando user-agent y demás) me sigue pateando con un error 403!

Arghhhhh  >:(

  Yo seguiré intentando a ver....,  creo que  será con el módulo urllib ¿?,  lol como mola este emoticono --->  >:( >:(

braulio--

Yo me pondré a intentarlo esta noche  >:( >:( >:( es verdad, si que mola.

Novlucker

#102
jaja, ya lo tengo terminado, el problema era que estaba generando mal la consulta con urllib, lo raro es que si bien estaba pasando parámetros equivocados a la función urlopen no me pateaba eso, sino un error 403 (igual eran dos problemas separados) :P

Otra cosa ... desde ya les digo que deben de cambiar el user-agent al hacer el GET a google, porque el user-agent por defecto de urllib/urllib2 es "Python-urllib/2.6/3.1", y a google no le gusta :silbar:

:http://www.user-agents.org/

[Edito]
Debo de agregar además, que si bien no es "difícil", como que tampoco es muy sencillo para los que comienzan :-X (era mi idea inicial)

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

CaronteGold


Al hacer urlopen, se supone que copio el source, pero no, copio algo incorrecto :S :S  >:( >:(

braulio--

No, al hacer urlopen no te devuelve el source, te devuelve un objeto. Lo que te devuelve el source es el método .read() de ese objeto.
Yo ahora mismo estoy en windows por qué la lié con linux y no voy a poder hacer nada, aunque de todas formas lo acabaré haciendo.

Novlucker

Excusas! Python es multiplataforma!

Por mi parte ya he dejado el script "limpio" para que sea lo más entendible posible, ya que se supone que en parte es la idea.
Una muestra :P

Citar>>>
Ingrese texto de imagen a buscar: wallpapers

<Descargando 21 imagenes>

d:\Imagenes\wTYjGJHklorkQM.jpg
d:\Imagenes\blgyYUWc_GXkwM.jpg
d:\Imagenes\bP7o0OcpkhzwGM.jpg
d:\Imagenes\JhX_rdRwoYutQM.jpg
d:\Imagenes\_2xbHUMSifRvlM.jpg
d:\Imagenes\GH5IVj4CbxQAPM.jpg
d:\Imagenes\vFHnJs2xnEQLgM.jpg
d:\Imagenes\L1WXw5lr9KzUUM.jpg
d:\Imagenes\oMxwx2Z1q7MczM.jpg
d:\Imagenes\V5Tljp9ZSPtkuM.jpg
d:\Imagenes\zAkTCWgWmekv_M.jpg
d:\Imagenes\sTiDwmbusPnl7M.jpg
d:\Imagenes\0TYaokqa7NNs3M.jpg
d:\Imagenes\E6ydly-vf7rfLM.jpg
d:\Imagenes\dsIX0BzhiIz0fM.jpg
d:\Imagenes\9bMAGXCe0sNW9M.jpg
d:\Imagenes\kf4KrWAu-9gBpM.jpg
d:\Imagenes\LElXIbJfFGDcVM.jpg
d:\Imagenes\EaFnBmtX1b7JTM.jpg
d:\Imagenes\gxZPznPGLgKQHM.jpg
d:\Imagenes\oa2kPZFNCiaf-M.jpg

<Completado>
>>>


Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

braulio--

Yo lo empiezo ahora, en media hora espero tenerlo hecho.

braulio--

#107
Aqui está el código para python 3.1
Código (python) [Seleccionar]

import urllib.request,re
import urllib.request,re
def extension(url):
   url = url[::-1]
   extension = url[:4]
   return extension[::-1]
palabra = input("Introduzca la palabra de la busqueda : ").replace(' ','%20')
numerodefotos = int(input("Cuantas fotos quieres ? : "))
partedelhost = "http://www.google.es"
parte1 = "/images?gbv=2&hl=en&sa=1&q="
parte2 = "&btnG=Search&aq=f&oq=&start=0"
url = partedelhost+parte1+palabra+parte2
diccionario = { "User-Agent" : "Mozilla Firefox"}
req = urllib.request.Request(url,headers=diccionario)
codigo = urllib.request.urlopen(req).read()
expresionre =  re.compile('http://[^/]*?gstatic.com/images.*? ', re.IGNORECASE)
listadefotos = expresionre.findall(str(codigo))
for i in range(numerodefotos):
   urllib.request.urlretrieve(listadefotos[i],str(i)+"."+extension(listadefotos[i]))
print("Todo hecho")

El ejercicio va a ser un programa para jugar online al 3 en raya, tenéis que hacer el cliente y el server.
Suerte.
 

Novlucker

Bien hecho!

Dejo mi code, tiene comprobación de errores en algún sitio, además de que lo he hecho bastante estructurado, por lo que el código es el doble de largo :P

Código (python) [Seleccionar]
import urllib.request, urllib.parse, re

def Download(URL, name):
       try:
               webretrieve = urllib.request.urlretrieve(URL, name)
               return webretrieve[0]
       except:
               return 'Error en la descarga'

def ArrayFilter(aList):
       newList = []
       for a in aList:
               if a not in newList:
                       newList.append(a)
       return newList

def Searchths(text):
       r = re.compile('[a-zA-Z0-9_-]{13}M:')
       IDsths = r.findall(text)
       return IDsths

def Webrequest(URL, params):
       Headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
       p = urllib.parse.urlencode(params)
       URL += p
       customrequest = urllib.request.Request(URL,headers=Headers)
       webcontent = urllib.request.urlopen(customrequest)
       return str(webcontent.read())

def SeDoGoImage(imagetext):
       searchurl = 'http://images.google.es/images?'
       imagesurl = 'http://t1.gstatic.com/images?q=tbn:'

       Wrtext = Webrequest(searchurl,{'q':imagetext})
       aImages = ArrayFilter(Searchths(Wrtext))
       print('\n<Descargando',len(aImages),'imagenes>\n')
       for i in aImages:
               d = Download(imagesurl + i[:-1],'d:\\Imagenes\\' + i[:-1] + '.jpg')
               print(d)
       print('\n<Completado>')

IMG = input('Ingrese texto de imagen a buscar: ')
SeDoGoImage(IMG)


El ejercicio que planteas sería para jugar contra la máquina verdad?

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

braulio--

Bueno, yo lo pensé para jugador contra jugador, pero hagan lo que quieran.