Re: [Python-es] Reintentar
Incríble!. Gracias!! Saludos, Gonzalo 2015-08-26 11:42 GMT-04:00 Miguel González Álvarez : > > > 2015-08-26 17:19 GMT+02:00 Gonzalo V : > >> ... >> ¿Sabes tu cómo simular un error 504 en python? >> >> >> > Para simular respuestas HTTP es muy útil el servicio http://httpbin.org/ > (por cierto escrito en Python). > > En tu caso, se haría poniendo como URL http://httpbin.org/status/504: > > >>> import urllib.request > >>> req = urllib.request.urlopen('http://httpbin.org/status/504') > Traceback (most recent call last): > File "", line 1, in > File "/usr/local/lib/python3.4/urllib/request.py", line 153, in urlopen > return opener.open(url, data, timeout) > File "/usr/local/lib/python3.4/urllib/request.py", line 461, in open > response = meth(req, response) > File "/usr/local/lib/python3.4/urllib/request.py", line 571, in > http_response > 'http', request, response, code, msg, hdrs) > File "/usr/local/lib/python3.4/urllib/request.py", line 499, in error > return self._call_chain(*args) > File "/usr/local/lib/python3.4/urllib/request.py", line 433, in > _call_chain > result = func(*args) > File "/usr/local/lib/python3.4/urllib/request.py", line 579, in > http_error_default > raise HTTPError(req.full_url, code, msg, hdrs, fp) > urllib.error.HTTPError: HTTP Error 504: GATEWAY TIMEOUT > > > -- > Miguel González > migonzal...@gmail.com > PGP ID: 0C63761BEEBD05D3 > > ___ > Python-es mailing list > Python-es@python.org > https://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > > ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Reintentar
2015-08-26 17:19 GMT+02:00 Gonzalo V : > ... > ¿Sabes tu cómo simular un error 504 en python? > > > Para simular respuestas HTTP es muy útil el servicio http://httpbin.org/ (por cierto escrito en Python). En tu caso, se haría poniendo como URL http://httpbin.org/status/504: >>> import urllib.request >>> req = urllib.request.urlopen('http://httpbin.org/status/504') Traceback (most recent call last): File "", line 1, in File "/usr/local/lib/python3.4/urllib/request.py", line 153, in urlopen return opener.open(url, data, timeout) File "/usr/local/lib/python3.4/urllib/request.py", line 461, in open response = meth(req, response) File "/usr/local/lib/python3.4/urllib/request.py", line 571, in http_response 'http', request, response, code, msg, hdrs) File "/usr/local/lib/python3.4/urllib/request.py", line 499, in error return self._call_chain(*args) File "/usr/local/lib/python3.4/urllib/request.py", line 433, in _call_chain result = func(*args) File "/usr/local/lib/python3.4/urllib/request.py", line 579, in http_error_default raise HTTPError(req.full_url, code, msg, hdrs, fp) urllib.error.HTTPError: HTTP Error 504: GATEWAY TIMEOUT -- Miguel González migonzal...@gmail.com PGP ID: 0C63761BEEBD05D3 ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Reintentar
Desconozco la finalidad de tu programa. Entiendo que tienes la necesidad de depurar y quieres llegar a ese punto para ver como responde tu programa. Puedes simplemente sacar a una función la ejecución de la llamada con urlib y devolver el código de respuesta. Así puedes reintentarlo. Un saludo 2015-08-26 17:19 GMT+02:00 Gonzalo V : > Gracias Sergio. La verdad es que no ha sido fácil aprender python sobre > todo si casi toda la info de calidad está en inglés y las traducciones son > de personas muy nobles que lo hacen sin interés. Algunas están traducidas > al mexicano, con sus modismos, otros en argentino, español, en fin... > Gracias por tu respuesta, había pensado hacerlo por ensayo e error ya que > encuentro que es una forma segura de hacer un codigo "a prueba de balas" > pero no sé cómo emular o simular un error 504, que son errores muy > inesperados. > ¿Sabes tu cómo simular un error 504 en python? > > Saludos, > Gonzalo > > El 26 de agosto de 2015, 11:06, Sergio Soto Núñez > escribió: > >> Buenas Gonzalo, >> la verdad es que para llevar poco tiempo estás haciendo cosas muy >> interesante. >> >> Si me dejas que te de un consejo, siempre que tengas una duda lo mejor es >> abrir una consola (python o ipython) y realizar la prueba. Puedes tirar >> linea a linea hasta emular la situación que estás estudiando. >> >> Otra opción mas potente es utilizar un debugger (como ipdb [1]) para >> setear un break point. El intérprete parará en esa línea y podrás observar >> el valor de cada variable y estudiar el comportamiento. >> >> Te digo esto porque preguntas como las que has hecho se resuelven >> fácilmente tal y como han hecho algunos de los miembros, tres líneas de >> código y ejecutandolo. Y siempre aprenderás mucho más por ti mismo que >> preguntando. >> >> ¡Un saludo y ánimos en tu proyecto! >> >> [1] Un manual de uso de ipdb: >> https://pythonadventures.wordpress.com/tag/ipdb/ >> >> On Wed, Aug 26, 2015 at 12:07 PM, Alberto J. Sánchez Sanz < >> ajsanchezs...@gmail.com> wrote: >> >>> for i in range(3): >>> print i >>> >>> On 26 August 2015 at 12:00, Yamila Moreno Suárez >>> wrote: >>> i = 0 while i < 3: print(i) i += 1 output >> 0 1 2 2015-08-26 11:47 GMT+02:00 Gonzalo V : > Muchas Gracias Andres! > Tenia entendido que era While true daba el resultado . ¿Cómo lee el > intérprete while 1: Que reintente 1 sola vez? > ¿Cuál sería el código para reintentos controlados (que reintente 3 > veces, por ejemplo )? > Gracias! > > Saludos, > Gonzalo > > 2015-08-26 2:13 GMT-04:00 Oriol Andrés : > >> hola, puedes encerrar la funcion en un bucle while. >> while 1: >> response = urlopen >> if response.headers.code == 200: >> break >> On Aug 26, 2015 2:02 a.m., "Gonzalo V" wrote: >> >>> Hola a todos. >>> Tengo un código que hace preguntas a un servidor y algunas veces >>> retorna un 504, el codigo lo maneja bien pero me gustaría que >>> reintentara. >>> ¿Alguien me puede ayudar? >>> el codigo es: >>> import urllib.request >>> import urllib.error >>> from bs4 import BeautifulSoup >>> import re, csv >>> from FuncionCsv import LlenarCsv >>> >>> >>> >>> fhand=open('isbn.txt') >>> #csvfile=open('ResultadoScrapping.csv', 'w', newline='') >>> for line in fhand: >>> try: >>>req=urllib.request.urlopen(''+line) >>>resp=req.read() >>>soup=BeautifulSoup(resp,'html.parser') >>> >>> origen=soup.find(string=re.compile("Origen: >>> ")).find_next().get_text() >>> nombre=soup.find(name="h1",itemprop="name").get_text() >>> >>> precioAhora=soup.find(name="p",class_="precioAhora").get_text() >>> d=soup.find(name="p",class_="stock").get_text() >>> disp=d.split() >>> except AttributeError: >>> disp="no encontrado" >>> nombre='' >>> origen='' >>> precioAhora='' >>> except urllib.error.HTTPError as e: >>> if e.getcode()==504: >>> disp = "sin respuesta del servidor" >>> print (e.getcode(),disp) >>> csvfile.close() >>> >>> print(line,nombre,origen,precioAhora,disp) >>> line1=line.split() >>> LlenarCsv('Resultado.csv',line1,nombre,origen,precioAhora,disp) >>> cierracsv() >>> >>> >>> >>> >>> Saludos, >>> Gonzalo >>> >>> ___ >>> Python-es mailing list >>> Python-es@python.org >>> https://mail.python.org/mailman/listinfo/python-es >>> FAQ: http://python-es-faq.wikidot.com/ >>> >>> >> ___ >> Python-es mailing list >> Python-es@python.org >> https://mail.python.org/mailman/
Re: [Python-es] Reintentar
Gracias Sergio. La verdad es que no ha sido fácil aprender python sobre todo si casi toda la info de calidad está en inglés y las traducciones son de personas muy nobles que lo hacen sin interés. Algunas están traducidas al mexicano, con sus modismos, otros en argentino, español, en fin... Gracias por tu respuesta, había pensado hacerlo por ensayo e error ya que encuentro que es una forma segura de hacer un codigo "a prueba de balas" pero no sé cómo emular o simular un error 504, que son errores muy inesperados. ¿Sabes tu cómo simular un error 504 en python? Saludos, Gonzalo El 26 de agosto de 2015, 11:06, Sergio Soto Núñez escribió: > Buenas Gonzalo, > la verdad es que para llevar poco tiempo estás haciendo cosas muy > interesante. > > Si me dejas que te de un consejo, siempre que tengas una duda lo mejor es > abrir una consola (python o ipython) y realizar la prueba. Puedes tirar > linea a linea hasta emular la situación que estás estudiando. > > Otra opción mas potente es utilizar un debugger (como ipdb [1]) para > setear un break point. El intérprete parará en esa línea y podrás observar > el valor de cada variable y estudiar el comportamiento. > > Te digo esto porque preguntas como las que has hecho se resuelven > fácilmente tal y como han hecho algunos de los miembros, tres líneas de > código y ejecutandolo. Y siempre aprenderás mucho más por ti mismo que > preguntando. > > ¡Un saludo y ánimos en tu proyecto! > > [1] Un manual de uso de ipdb: > https://pythonadventures.wordpress.com/tag/ipdb/ > > On Wed, Aug 26, 2015 at 12:07 PM, Alberto J. Sánchez Sanz < > ajsanchezs...@gmail.com> wrote: > >> for i in range(3): >> print i >> >> On 26 August 2015 at 12:00, Yamila Moreno Suárez >> wrote: >> >>> i = 0 >>> while i < 3: >>> print(i) >>> i += 1 >>> >>> output >> >>> 0 >>> 1 >>> 2 >>> >>> >>> >>> >>> 2015-08-26 11:47 GMT+02:00 Gonzalo V : >>> Muchas Gracias Andres! Tenia entendido que era While true daba el resultado . ¿Cómo lee el intérprete while 1: Que reintente 1 sola vez? ¿Cuál sería el código para reintentos controlados (que reintente 3 veces, por ejemplo )? Gracias! Saludos, Gonzalo 2015-08-26 2:13 GMT-04:00 Oriol Andrés : > hola, puedes encerrar la funcion en un bucle while. > while 1: > response = urlopen > if response.headers.code == 200: > break > On Aug 26, 2015 2:02 a.m., "Gonzalo V" wrote: > >> Hola a todos. >> Tengo un código que hace preguntas a un servidor y algunas veces >> retorna un 504, el codigo lo maneja bien pero me gustaría que >> reintentara. >> ¿Alguien me puede ayudar? >> el codigo es: >> import urllib.request >> import urllib.error >> from bs4 import BeautifulSoup >> import re, csv >> from FuncionCsv import LlenarCsv >> >> >> >> fhand=open('isbn.txt') >> #csvfile=open('ResultadoScrapping.csv', 'w', newline='') >> for line in fhand: >> try: >>req=urllib.request.urlopen(''+line) >>resp=req.read() >>soup=BeautifulSoup(resp,'html.parser') >> >> origen=soup.find(string=re.compile("Origen: >> ")).find_next().get_text() >> nombre=soup.find(name="h1",itemprop="name").get_text() >> >> precioAhora=soup.find(name="p",class_="precioAhora").get_text() >> d=soup.find(name="p",class_="stock").get_text() >> disp=d.split() >> except AttributeError: >> disp="no encontrado" >> nombre='' >> origen='' >> precioAhora='' >> except urllib.error.HTTPError as e: >> if e.getcode()==504: >> disp = "sin respuesta del servidor" >> print (e.getcode(),disp) >> csvfile.close() >> >> print(line,nombre,origen,precioAhora,disp) >> line1=line.split() >> LlenarCsv('Resultado.csv',line1,nombre,origen,precioAhora,disp) >> cierracsv() >> >> >> >> >> Saludos, >> Gonzalo >> >> ___ >> Python-es mailing list >> Python-es@python.org >> https://mail.python.org/mailman/listinfo/python-es >> FAQ: http://python-es-faq.wikidot.com/ >> >> > ___ > Python-es mailing list > Python-es@python.org > https://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > > ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ >>> >>> >>> -- >>> Yamila Moreno Suárez >>> http://dendarii.es >>> http://moduslaborandi.net >>> >>> ___ >>> Python-es mailing list >>> Python-es@pyth
Re: [Python-es] Reintentar
Buenas Gonzalo, la verdad es que para llevar poco tiempo estás haciendo cosas muy interesante. Si me dejas que te de un consejo, siempre que tengas una duda lo mejor es abrir una consola (python o ipython) y realizar la prueba. Puedes tirar linea a linea hasta emular la situación que estás estudiando. Otra opción mas potente es utilizar un debugger (como ipdb [1]) para setear un break point. El intérprete parará en esa línea y podrás observar el valor de cada variable y estudiar el comportamiento. Te digo esto porque preguntas como las que has hecho se resuelven fácilmente tal y como han hecho algunos de los miembros, tres líneas de código y ejecutandolo. Y siempre aprenderás mucho más por ti mismo que preguntando. ¡Un saludo y ánimos en tu proyecto! [1] Un manual de uso de ipdb: https://pythonadventures.wordpress.com/tag/ipdb/ On Wed, Aug 26, 2015 at 12:07 PM, Alberto J. Sánchez Sanz < ajsanchezs...@gmail.com> wrote: > for i in range(3): > print i > > On 26 August 2015 at 12:00, Yamila Moreno Suárez > wrote: > >> i = 0 >> while i < 3: >> print(i) >> i += 1 >> >> output >> >> 0 >> 1 >> 2 >> >> >> >> >> 2015-08-26 11:47 GMT+02:00 Gonzalo V : >> >>> Muchas Gracias Andres! >>> Tenia entendido que era While true daba el resultado . ¿Cómo lee el >>> intérprete while 1: Que reintente 1 sola vez? >>> ¿Cuál sería el código para reintentos controlados (que reintente 3 >>> veces, por ejemplo )? >>> Gracias! >>> >>> Saludos, >>> Gonzalo >>> >>> 2015-08-26 2:13 GMT-04:00 Oriol Andrés : >>> hola, puedes encerrar la funcion en un bucle while. while 1: response = urlopen if response.headers.code == 200: break On Aug 26, 2015 2:02 a.m., "Gonzalo V" wrote: > Hola a todos. > Tengo un código que hace preguntas a un servidor y algunas veces > retorna un 504, el codigo lo maneja bien pero me gustaría que reintentara. > ¿Alguien me puede ayudar? > el codigo es: > import urllib.request > import urllib.error > from bs4 import BeautifulSoup > import re, csv > from FuncionCsv import LlenarCsv > > > > fhand=open('isbn.txt') > #csvfile=open('ResultadoScrapping.csv', 'w', newline='') > for line in fhand: > try: >req=urllib.request.urlopen(''+line) >resp=req.read() >soup=BeautifulSoup(resp,'html.parser') > > origen=soup.find(string=re.compile("Origen: > ")).find_next().get_text() > nombre=soup.find(name="h1",itemprop="name").get_text() > precioAhora=soup.find(name="p",class_="precioAhora").get_text() > d=soup.find(name="p",class_="stock").get_text() > disp=d.split() > except AttributeError: > disp="no encontrado" > nombre='' > origen='' > precioAhora='' > except urllib.error.HTTPError as e: > if e.getcode()==504: > disp = "sin respuesta del servidor" > print (e.getcode(),disp) > csvfile.close() > > print(line,nombre,origen,precioAhora,disp) > line1=line.split() > LlenarCsv('Resultado.csv',line1,nombre,origen,precioAhora,disp) > cierracsv() > > > > > Saludos, > Gonzalo > > ___ > Python-es mailing list > Python-es@python.org > https://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > > ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ >>> >>> ___ >>> Python-es mailing list >>> Python-es@python.org >>> https://mail.python.org/mailman/listinfo/python-es >>> FAQ: http://python-es-faq.wikidot.com/ >>> >>> >> >> >> -- >> Yamila Moreno Suárez >> http://dendarii.es >> http://moduslaborandi.net >> >> ___ >> Python-es mailing list >> Python-es@python.org >> https://mail.python.org/mailman/listinfo/python-es >> FAQ: http://python-es-faq.wikidot.com/ >> >> > > ___ > Python-es mailing list > Python-es@python.org > https://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > > ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Reintentar
for i in range(3): print i On 26 August 2015 at 12:00, Yamila Moreno Suárez wrote: > i = 0 > while i < 3: > print(i) > i += 1 > > output >> > 0 > 1 > 2 > > > > > 2015-08-26 11:47 GMT+02:00 Gonzalo V : > >> Muchas Gracias Andres! >> Tenia entendido que era While true daba el resultado . ¿Cómo lee el >> intérprete while 1: Que reintente 1 sola vez? >> ¿Cuál sería el código para reintentos controlados (que reintente 3 veces, >> por ejemplo )? >> Gracias! >> >> Saludos, >> Gonzalo >> >> 2015-08-26 2:13 GMT-04:00 Oriol Andrés : >> >>> hola, puedes encerrar la funcion en un bucle while. >>> while 1: >>> response = urlopen >>> if response.headers.code == 200: >>> break >>> On Aug 26, 2015 2:02 a.m., "Gonzalo V" wrote: >>> Hola a todos. Tengo un código que hace preguntas a un servidor y algunas veces retorna un 504, el codigo lo maneja bien pero me gustaría que reintentara. ¿Alguien me puede ayudar? el codigo es: import urllib.request import urllib.error from bs4 import BeautifulSoup import re, csv from FuncionCsv import LlenarCsv fhand=open('isbn.txt') #csvfile=open('ResultadoScrapping.csv', 'w', newline='') for line in fhand: try: req=urllib.request.urlopen(''+line) resp=req.read() soup=BeautifulSoup(resp,'html.parser') origen=soup.find(string=re.compile("Origen: ")).find_next().get_text() nombre=soup.find(name="h1",itemprop="name").get_text() precioAhora=soup.find(name="p",class_="precioAhora").get_text() d=soup.find(name="p",class_="stock").get_text() disp=d.split() except AttributeError: disp="no encontrado" nombre='' origen='' precioAhora='' except urllib.error.HTTPError as e: if e.getcode()==504: disp = "sin respuesta del servidor" print (e.getcode(),disp) csvfile.close() print(line,nombre,origen,precioAhora,disp) line1=line.split() LlenarCsv('Resultado.csv',line1,nombre,origen,precioAhora,disp) cierracsv() Saludos, Gonzalo ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/ >>> ___ >>> Python-es mailing list >>> Python-es@python.org >>> https://mail.python.org/mailman/listinfo/python-es >>> FAQ: http://python-es-faq.wikidot.com/ >>> >>> >> >> ___ >> Python-es mailing list >> Python-es@python.org >> https://mail.python.org/mailman/listinfo/python-es >> FAQ: http://python-es-faq.wikidot.com/ >> >> > > > -- > Yamila Moreno Suárez > http://dendarii.es > http://moduslaborandi.net > > ___ > Python-es mailing list > Python-es@python.org > https://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > > ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Reintentar
El 26 de agosto de 2015, 13:41, Gonzalo V escribió: > perdon, soy nuevo en python > si hago un for i in range(3): va a dar 3 pasadas aunque sea true?. La > idea es que si la conexion es true pase 1 vez y si falla de 3 pasadas. > Puedes usar break dentro del bucle. https://docs.python.org/3.5/reference/simple_stmts.html#the-break-statement > Muchas gracias! > > Saludos, > Gonzalo > > El 26 de agosto de 2015, 6:26, Daπid escribió: > >> >> 2015-08-26 11:47 GMT+02:00 Gonzalo V : >> >>> Tenia entendido que era While true daba el resultado . ¿Cómo lee el >>> intérprete while 1: Que reintente 1 sola vez? >>> >> >> while algo: >> >> se interpreta como: >> >> while bool(algo): >> >> donde bool() convierte el objeto en True / False. >> >> >> >>> ¿Cuál sería el código para reintentos controlados (que reintente 3 >>> veces, por ejemplo )? >>> >> >> No uses un while, usa un for: >> >> for i in range(3): >> >> >> ___ >> Python-es mailing list >> Python-es@python.org >> https://mail.python.org/mailman/listinfo/python-es >> FAQ: http://python-es-faq.wikidot.com/ >> >> > > ___ > Python-es mailing list > Python-es@python.org > https://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > > ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Reintentar
2015-08-26 13:41 GMT+02:00 Gonzalo V : > perdon, soy nuevo en python > si hago un for i in range(3): va a dar 3 pasadas aunque sea true?. La > idea es que si la conexion es true pase 1 vez y si falla de 3 pasadas. > Muchas gracias! > ¿Aunque qué sea true? Lo que tienes que hacer es, una vez que la conexión sea establecida, parar. for i in range(3): try: req=urllib.request.urlopen(''+line) ... break except urllib.error.HTTPError: # Try again. pass ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Reintentar
perdon, soy nuevo en python si hago un for i in range(3): va a dar 3 pasadas aunque sea true?. La idea es que si la conexion es true pase 1 vez y si falla de 3 pasadas. Muchas gracias! Saludos, Gonzalo El 26 de agosto de 2015, 6:26, Daπid escribió: > > 2015-08-26 11:47 GMT+02:00 Gonzalo V : > >> Tenia entendido que era While true daba el resultado . ¿Cómo lee el >> intérprete while 1: Que reintente 1 sola vez? >> > > while algo: > > se interpreta como: > > while bool(algo): > > donde bool() convierte el objeto en True / False. > > > >> ¿Cuál sería el código para reintentos controlados (que reintente 3 veces, >> por ejemplo )? >> > > No uses un while, usa un for: > > for i in range(3): > > > ___ > Python-es mailing list > Python-es@python.org > https://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > > ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Reintentar
2015-08-26 11:47 GMT+02:00 Gonzalo V : > Tenia entendido que era While true daba el resultado . ¿Cómo lee el > intérprete while 1: Que reintente 1 sola vez? > while algo: se interpreta como: while bool(algo): donde bool() convierte el objeto en True / False. > ¿Cuál sería el código para reintentos controlados (que reintente 3 veces, > por ejemplo )? > No uses un while, usa un for: for i in range(3): ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Reintentar
i = 0 while i < 3: print(i) i += 1 output >> 0 1 2 2015-08-26 11:47 GMT+02:00 Gonzalo V : > Muchas Gracias Andres! > Tenia entendido que era While true daba el resultado . ¿Cómo lee el > intérprete while 1: Que reintente 1 sola vez? > ¿Cuál sería el código para reintentos controlados (que reintente 3 veces, > por ejemplo )? > Gracias! > > Saludos, > Gonzalo > > 2015-08-26 2:13 GMT-04:00 Oriol Andrés : > >> hola, puedes encerrar la funcion en un bucle while. >> while 1: >> response = urlopen >> if response.headers.code == 200: >> break >> On Aug 26, 2015 2:02 a.m., "Gonzalo V" wrote: >> >>> Hola a todos. >>> Tengo un código que hace preguntas a un servidor y algunas veces retorna >>> un 504, el codigo lo maneja bien pero me gustaría que reintentara. >>> ¿Alguien me puede ayudar? >>> el codigo es: >>> import urllib.request >>> import urllib.error >>> from bs4 import BeautifulSoup >>> import re, csv >>> from FuncionCsv import LlenarCsv >>> >>> >>> >>> fhand=open('isbn.txt') >>> #csvfile=open('ResultadoScrapping.csv', 'w', newline='') >>> for line in fhand: >>> try: >>>req=urllib.request.urlopen(''+line) >>>resp=req.read() >>>soup=BeautifulSoup(resp,'html.parser') >>> >>> origen=soup.find(string=re.compile("Origen: >>> ")).find_next().get_text() >>> nombre=soup.find(name="h1",itemprop="name").get_text() >>> precioAhora=soup.find(name="p",class_="precioAhora").get_text() >>> d=soup.find(name="p",class_="stock").get_text() >>> disp=d.split() >>> except AttributeError: >>> disp="no encontrado" >>> nombre='' >>> origen='' >>> precioAhora='' >>> except urllib.error.HTTPError as e: >>> if e.getcode()==504: >>> disp = "sin respuesta del servidor" >>> print (e.getcode(),disp) >>> csvfile.close() >>> >>> print(line,nombre,origen,precioAhora,disp) >>> line1=line.split() >>> LlenarCsv('Resultado.csv',line1,nombre,origen,precioAhora,disp) >>> cierracsv() >>> >>> >>> >>> >>> Saludos, >>> Gonzalo >>> >>> ___ >>> Python-es mailing list >>> Python-es@python.org >>> https://mail.python.org/mailman/listinfo/python-es >>> FAQ: http://python-es-faq.wikidot.com/ >>> >>> >> ___ >> Python-es mailing list >> Python-es@python.org >> https://mail.python.org/mailman/listinfo/python-es >> FAQ: http://python-es-faq.wikidot.com/ >> >> > > ___ > Python-es mailing list > Python-es@python.org > https://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > > -- Yamila Moreno Suárez http://dendarii.es http://moduslaborandi.net ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Reintentar
Muchas Gracias Andres! Tenia entendido que era While true daba el resultado . ¿Cómo lee el intérprete while 1: Que reintente 1 sola vez? ¿Cuál sería el código para reintentos controlados (que reintente 3 veces, por ejemplo )? Gracias! Saludos, Gonzalo 2015-08-26 2:13 GMT-04:00 Oriol Andrés : > hola, puedes encerrar la funcion en un bucle while. > while 1: > response = urlopen > if response.headers.code == 200: > break > On Aug 26, 2015 2:02 a.m., "Gonzalo V" wrote: > >> Hola a todos. >> Tengo un código que hace preguntas a un servidor y algunas veces retorna >> un 504, el codigo lo maneja bien pero me gustaría que reintentara. >> ¿Alguien me puede ayudar? >> el codigo es: >> import urllib.request >> import urllib.error >> from bs4 import BeautifulSoup >> import re, csv >> from FuncionCsv import LlenarCsv >> >> >> >> fhand=open('isbn.txt') >> #csvfile=open('ResultadoScrapping.csv', 'w', newline='') >> for line in fhand: >> try: >>req=urllib.request.urlopen(''+line) >>resp=req.read() >>soup=BeautifulSoup(resp,'html.parser') >> >> origen=soup.find(string=re.compile("Origen: >> ")).find_next().get_text() >> nombre=soup.find(name="h1",itemprop="name").get_text() >> precioAhora=soup.find(name="p",class_="precioAhora").get_text() >> d=soup.find(name="p",class_="stock").get_text() >> disp=d.split() >> except AttributeError: >> disp="no encontrado" >> nombre='' >> origen='' >> precioAhora='' >> except urllib.error.HTTPError as e: >> if e.getcode()==504: >> disp = "sin respuesta del servidor" >> print (e.getcode(),disp) >> csvfile.close() >> >> print(line,nombre,origen,precioAhora,disp) >> line1=line.split() >> LlenarCsv('Resultado.csv',line1,nombre,origen,precioAhora,disp) >> cierracsv() >> >> >> >> >> Saludos, >> Gonzalo >> >> ___ >> Python-es mailing list >> Python-es@python.org >> https://mail.python.org/mailman/listinfo/python-es >> FAQ: http://python-es-faq.wikidot.com/ >> >> > ___ > Python-es mailing list > Python-es@python.org > https://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > > ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] Reintentar
hola, puedes encerrar la funcion en un bucle while. while 1: response = urlopen if response.headers.code == 200: break On Aug 26, 2015 2:02 a.m., "Gonzalo V" wrote: > Hola a todos. > Tengo un código que hace preguntas a un servidor y algunas veces retorna > un 504, el codigo lo maneja bien pero me gustaría que reintentara. > ¿Alguien me puede ayudar? > el codigo es: > import urllib.request > import urllib.error > from bs4 import BeautifulSoup > import re, csv > from FuncionCsv import LlenarCsv > > > > fhand=open('isbn.txt') > #csvfile=open('ResultadoScrapping.csv', 'w', newline='') > for line in fhand: > try: >req=urllib.request.urlopen(''+line) >resp=req.read() >soup=BeautifulSoup(resp,'html.parser') > > origen=soup.find(string=re.compile("Origen: > ")).find_next().get_text() > nombre=soup.find(name="h1",itemprop="name").get_text() > precioAhora=soup.find(name="p",class_="precioAhora").get_text() > d=soup.find(name="p",class_="stock").get_text() > disp=d.split() > except AttributeError: > disp="no encontrado" > nombre='' > origen='' > precioAhora='' > except urllib.error.HTTPError as e: > if e.getcode()==504: > disp = "sin respuesta del servidor" > print (e.getcode(),disp) > csvfile.close() > > print(line,nombre,origen,precioAhora,disp) > line1=line.split() > LlenarCsv('Resultado.csv',line1,nombre,origen,precioAhora,disp) > cierracsv() > > > > > Saludos, > Gonzalo > > ___ > Python-es mailing list > Python-es@python.org > https://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > > ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
[Python-es] Reintentar
Hola a todos. Tengo un código que hace preguntas a un servidor y algunas veces retorna un 504, el codigo lo maneja bien pero me gustaría que reintentara. ¿Alguien me puede ayudar? el codigo es: import urllib.request import urllib.error from bs4 import BeautifulSoup import re, csv from FuncionCsv import LlenarCsv fhand=open('isbn.txt') #csvfile=open('ResultadoScrapping.csv', 'w', newline='') for line in fhand: try: req=urllib.request.urlopen(''+line) resp=req.read() soup=BeautifulSoup(resp,'html.parser') origen=soup.find(string=re.compile("Origen: ")).find_next().get_text() nombre=soup.find(name="h1",itemprop="name").get_text() precioAhora=soup.find(name="p",class_="precioAhora").get_text() d=soup.find(name="p",class_="stock").get_text() disp=d.split() except AttributeError: disp="no encontrado" nombre='' origen='' precioAhora='' except urllib.error.HTTPError as e: if e.getcode()==504: disp = "sin respuesta del servidor" print (e.getcode(),disp) csvfile.close() print(line,nombre,origen,precioAhora,disp) line1=line.split() LlenarCsv('Resultado.csv',line1,nombre,origen,precioAhora,disp) cierracsv() Saludos, Gonzalo ___ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/