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 ejemplo ETH para Ethereum o BTC para bitcoin).

    • Despues el precio puede devolverse de dos formas (elegir una):