Paquete requests
El paquete requests es uno muy usado. Formalmente podemos decir que es un cliente HTTP. Con el podemos realizar peticiones de recursos web de una forma muy sencilla.
Veamos este ejemplo:
import requests
url = 'https://mendiolaza.gob.ar/'
response = requests.get(url)
codigo = response.text
print(f'Codigo de estado de la respuesta para {url}: {response.status_code}')
print(f'Primeros caracteres de la respuesta {codigo[:180]}')
# grabar el HTML resultante a disco
f = open('web.html', 'w')
f.write(codigo)
f.close()
Ese ejemplo muestra como descargar el contenido de una página web. El resultado obtenido es el código HTML de la página. Esto es similar a lo que hacen los navegadores de internet (Google Chrome o Mozilla Fiefox por ejemplo) cuando accedemos a una página web.
Esto es muy útil para obtener información de una página web y procesarla con Python. Existen tecnicas para extraer información de un documento HTML y transformarlo en datos que podemos usar en nuestro programa.
A estas técnicas se les llama Web scraping y son muy usadas.
Pero no toda la web es HTML. Existen muchos otros formatos de datos que
ya está pensados para ser leidos directamente por computadoras.
El formato JSON
es uno de los más usados.
Veamos un ejemplo de un recurso web en formato JSON
:
import requests
# JSON con los datos de un usuario de GitHub
url = 'https://api.github.com/users/avdata99'
response = requests.get(url)
data = response.json()
print(f'Datos: {data}')
# De que tipo es data?
print(type(data))
"""
Ejemplo
{
"login": "avdata99",
"id": 3237309,
"node_id": "MDQ6VXNlcjMyMzczMDk=",
"avatar_url": "https://avatars.githubusercontent.com/u/3237309?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/avdata99",
"html_url": "https://github.com/avdata99",
"followers_url": "https://api.github.com/users/avdata99/followers",
"following_url": "https://api.github.com/users/avdata99/following{/other_user}",
"gists_url": "https://api.github.com/users/avdata99/gists{/gist_id}",
"starred_url": "https://api.github.com/users/avdata99/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/avdata99/subscriptions",
"organizations_url": "https://api.github.com/users/avdata99/orgs",
"repos_url": "https://api.github.com/users/avdata99/repos",
"events_url": "https://api.github.com/users/avdata99/events{/privacy}",
"received_events_url": "https://api.github.com/users/avdata99/received_events",
"type": "User",
"site_admin": false,
"name": "Andres Vazquez",
"company": "OKFN",
"blog": "http://andresvazquez.com.ar",
"location": "Mendiolaza, Cordoba, Argentina",
"email": null,
"hireable": null,
"bio": null,
"twitter_username": "avdata99",
"public_repos": 153,
"public_gists": 19,
"followers": 82,
"following": 18,
"created_at": "2013-01-10T17:45:49Z",
"updated_at": "2022-08-28T17:01:16Z"
}
"""
En este caso podemos ver como el recurso JSON es transformado a diccionario
con la funcion json()
de la librería requests.
Veamos un ejemplo de un recurso web en formato txt
:
"""
Descargar un libro en formato texto y analizar
algunos detalles generales de su contenido
"""
import requests
import os
path_libro = 'florante.txt'
if not os.path.exists(path_libro):
print('DESCARGANDO LIBRO')
url = 'http://www.gutenberg.org/cache/epub/15531/pg15531.txt'
req = requests.get(url)
f = open(path_libro, 'w')
f.write(req.text)
f.close()
f = open(path_libro, 'r')
text = f.read()
f.close()
print('Leyendo archivo local')
print('Largo del texto {}'.format(len(text)))
print('Primeras 30 letras: {}'.format(text[:30]))
print('Ultimas 30 letras: {}'.format(text[-30:]))
# analizar letras
print('-------------------------------')
print('Letras mas usadas')
print('-------------------------------')
letras = {}
for letra in text:
letra = letra.lower()
if letra not in letras.keys():
letras[letra] = 0
letras[letra] += 1
letras = sorted(letras.items(), key=lambda x: x[1], reverse=True)
print(letras[:10])
# analizar palabras
print('-------------------------------')
print('Palabras mas usadas')
print('-------------------------------')
palabras = {}
for palabra in text.split(' '):
palabra = palabra.lower()
if len(palabra) < 5: # omitir las palabras cortas
continue
if palabra not in palabras.keys():
palabras[palabra] = 0
palabras[palabra] += 1
letras = sorted(palabras.items(), key=lambda x: x[1], reverse=True)
print(letras[:20])
En este ejemplo nos descargamos un libro completo y analizamos las letras y las palabras más usadas.
Tarea
Hacer un programa con Python que nos de el precio de alguna criptomenedas que el usuario desee (usaremos el USDT como si fuera el dólar como respuesta).
Con
input
le pediremos al usuario que ingrese el código de la criptomoneda que quiere consultar (por ejemploETH
para Ethereum oBTC
para bitcoin).Despues el precio puede devolverse de dos formas (elegir una):
Hacer un request a https://api2.binance.com/api/v3/ticker/24hr y obtener una lista de diccionarios obtenidos todos los precios. Iterar la lista hasta que se encuentre el
symbol
igual aXXXUSDT
(dondeXXX
es el código de la criptomoneda) y devolver el valor delastPrice
.Hacer un request a https://api2.binance.com/api/v3/ticker/24hr?symbol=XXXUSDT (donde
XXX
es el código de la criptomoneda) y obtener un diccionario con el precio. Devolver el valor delastPrice
.