1 of 21

<h1>Uso de APIS y Selenium.</h1>

Minería de medios sociales y Ciencia de Redes.

<ayudante>Jan Dimter Stránský.</ayudante>

2 of 21

<h2>APIS! Son…</h2>

<p> Un conjunto de reglas y protocolos que permiten que aplicaciones se comuniquen y compartan datos entre sí de manera estandarizada. Funciona como un intermediario que posibilita que una aplicación acceda a las funcionalidades o datos de otra de forma segura y eficiente. Al proporcionar una interfaz bien definida, las API permiten la integración entre sistemas y facilitan el traspaso de datos. </p>

3 of 21

<h2>Importancia.</h2>

<p>Es relevante en minería de datos al permitir acceder, procesar y compartir datos, optimizando el análisis de grandes conjuntos gracias a la facilidad que ofrece versus alternativas como el web scraping.</p>

4 of 21

Web Scraping! Es…

<p>Una técnica de extracción de datos automatizada que consiste en recopilar información de sitios web. Utilizando herramientas o programas, se analizan y se extraen datos estructurados o no estructurados de las páginas web. Esta técnica se emplea para obtener datos como precios de productos, noticias, comentarios de usuarios, entre otros.</p>

<h2>

</h2>

5 of 21

<h2>Importancia.</h2>

<p>El web scraping puede extraer información de sitios web que no cuentan con APIs o que ofrecen datos adicionales no expuestos por estas interfaces. Esto brinda una ventaja significativa en la obtención de datos más completos y variados.</p>

6 of 21

<h2>Tabla de COMPARACIÓN.</h2><table>

Característica

APIs

Web Scraping

Fuente de datos

Datos proporcionados por el proveedor de la API

Datos extraídos directamente de las páginas web

Acceso a datos

Acceso controlado y autorizado

Acceso no controlado ni autorizado (potencialmente)

Estructura de datos

Datos estructurados y consistentes

Datos no estructurados y pueden variar en formato

Mantenimiento

El proveedor de la API se encarga del mantenimiento y actualización

El scraping requiere un mantenimiento periódico debido a cambios en el sitio web

Escalabilidad

Limitada por los límites impuestos por el proveedor de la API

Mayor libertad y potencialmente ilimitada, pero depende de la eficiencia y capacidad del sistema de scraping

Velocidad de desarrollo

Rápido, ya que la API proporciona una interfaz fácil de usar

Puede ser más lento, ya que se deben implementar soluciones personalizadas para extraer los datos de las páginas web

Legalidad

Legal siempre y cuando se cumplan los términos y condiciones del proveedor de la API

Puede ser ilegal si se violan los términos y condiciones del sitio web o se realiza scraping no ético

Fiabilidad

Mayor fiabilidad, ya que los datos se obtienen directamente del proveedor de la API

Menor fiabilidad, ya que los datos pueden cambiar o no estar disponibles si el sitio web cambia su estructura o bloquea el scraping

Documentación

Las APIs suelen tener documentación oficial y soporte técnico

La documentación puede ser limitada o inexistente, dependiendo del sitio web y las técnicas de scraping utilizadas

</table>

7 of 21

Caso: SpaceX API

import requests

def get_launches():

url = "https://api.spacexdata.com/v3/launches"

response = requests.get(url)

if response.status_code == 200:

launches = response.json()

return launches

else:

return None

launches = get_launches()

if launches:

print("Últimos lanzamientos de SpaceX:")

for launch in launches:

print(f"Vuelo número: {launch['flight_number']}")

print(f"Misión: {launch['mission_name']}")

print(f"Fecha de lanzamiento: {launch['launch_date_utc']}")

print("-------------")

else:

print("No se pudo obtener la información de los lanzamientos.")

Últimos lanzamientos de SpaceX:�Vuelo número: 1�Misión: FalconSat�Fecha de lanzamiento: 2006-03-24T22:30:00.000Z�-------------�Vuelo número: 2�Misión: DemoSat�Fecha de lanzamiento: 2007-03-21T01:10:00.000Z�-------------�Vuelo número: 3�Misión: Trailblazer�Fecha de lanzamiento: 2008-08-03T03:34:00.000Z�-------------�Vuelo número: 4

...

8 of 21

Caso: OpenWeather API

def get_weather(api_key, city):

url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}"

response = requests.get(url)

if response.status_code == 200:

weather_data = response.json()

return weather_data

else:

return None

api_key = "afbc9a9f98e4cff816c22c1648b57f9b"

city = "Santiago de Chile"

weather_data = get_weather(api_key, city)

if weather_data:

print(f"Información del clima en {city}:")

print(f"Temperatura: {weather_data['main']['temp']}°F")

print(f"Humedad: {weather_data['main']['humidity']}%")

print(f"Descripción: {weather_data['weather'][0]['description']}")

else:

print("No se pudo obtener la información del clima.")

Información del clima en Santiago de Chile:

Temperatura: 283.11°F�Humedad: 90%�Descripción: mist

...

9 of 21

<h2>Más ejemplos.</h2>

Listado de API's Públicas en Chile

Listado de API's Públicas para distintos tipos de servicios digitales nacionales

Servicios Públicos / Gobierno

  • API Biblioteca del Congreso Leyes, Proyectos de Ley y Normas.
  • API Mercado Público: Todo lo que necesitas es estar conectado con los servicios de información disponibles en api.mercadopublico.cl para crear notificaciones y estar siempre actualizado de los negocios con el Estado.
  • API División Político Administrativa: Permite obtener Regiones, Provincias y Comunas.
  • API Portal ChileAtiende: API del Portal de Servicios del Estado - ChileAtiende.
  • Plataforma Ley de Lobby La API de la plataforma Ley de Lobby implementada para el Gobierno de Chile, es la interfaz para programadores que permite integrar los contenidos de este portal en tu sitio web.
  • Etc.

10 of 21

Qué pasó con Twitter?

<p> Resumen de los últimos cambios en la plataforma y formas de utilizar la API </p>

11 of 21

Cómo era ANTES de Musk.

Para el acceso a la API bastaba el registro en Twitter Developer Portal. Con el nivel más básico se tenía acceso a un máximo de 500 mil tweets mensuales, entre otras consultas disponibles.

12 of 21

Cómo es AHORA con Musk.

El acceso gratuito a la API se restringe a la obtención de tweets personales y la publicación de tweets (ambas con una mayor restricción).

13 of 21

Caso: Twitter API

import tweepy

# Coloca aquí tus credenciales de acceso de Twitter

consumer_key = "TU_CONSUMER_KEY"

consumer_secret = "TU_CONSUMER_SECRET"

access_token = "TU_ACCESS_TOKEN"

access_token_secret = "TU_ACCESS_TOKEN_SECRET"

# Configurar las credenciales de acceso a la API de Twitter

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)

auth.set_access_token(access_token, access_token_secret)

api = tweepy.API(auth)

# Obtener tweets de una cuenta específica

cuenta_objetivo = "TwitterDev" # Cambia esto al nombre de la cuenta que desees obtener los tweets

# Número de tweets que deseamos obtener (máximo 200 por solicitud)

numero_tweets = 3

# Obtener los tweets

tweets = api.user_timeline(screen_name=cuenta_objetivo, count=numero_tweets, tweet_mode="extended")

# Imprimir los datos de los tweets obtenidos

for tweet in tweets:

print(f"Usuario: {tweet.user.screen_name}")

print(f"Fecha: {tweet.created_at}")

print(f"Tweet: {tweet.full_text}")

print("------------------------------")

Usuario: EjemploUsuario�Fecha: 2023-07-20 15:30:45�Tweet: ¡Hoy es un gran día! 😄 #FelizMartes�------------------------------�Usuario: EjemploUsuario�Fecha: 2023-07-19 09:15:20�Tweet: ¡Estoy emocionado por el próximo evento! 🎉 #Emocionado

...

Para obtener los tokens es necesario registrarse en https://developer.twitter.com/

14 of 21

Cómo funciona Selenium?

<p> Contextualización e implementación. </p>

15 of 21

Selenium.

Es una herramienta que permite simular acciones humanas en un navegador, lo que significa que puede abrir una página web, hacer clic en elementos, enviar formularios, interactuar con JavaScript y extraer contenido.

16 of 21

Configuración.

01

from selenium import webdriver

driver = webdriver.Firefox()

# El objeto `driver` será la base para la interacción con el explorador web (en este caso Firefox).

17 of 21

Navegación.

02

driver.get("http://www.python.org")

driver.back()

driver.forward()

driver.refresh()

# La función get() nos servirá para dirigirnos a una url. Las funciones back(), forward() y refresh() nos ayudarán con la navegación.

18 of 21

Interacción.

03

from selenium.webdriver.common.by import By

find_element(By.ID, "id")�find_element(By.NAME, "name")

find_element(By.XPATH, "xpath")

find_element(By.LINK_TEXT, "link text")

find_element(By.PARTIAL_LINK_TEXT, "partial link text")

find_element(By.TAG_NAME, "tag name")

find_element(By.CLASS_NAME, "class name")

find_element(By.CSS_SELECTOR, "css selector")

# La función find_element() será clave pues nos permite identificar elementos de la web según diferentes atributos.

19 of 21

Interacción.

04

# La función send_keys nos permite simular la interacción de teclado del usuario. La función clear() limpia el espacio a escribir.

from selenium.webdriver.common.keys import Keys

elem = driver.find_element(By.NAME, "q")

elem.clear()

elem.send_keys("pycon")

elem.send_keys(Keys.RETURN)

20 of 21

Interacción.

05

# El atributo .text nos permite obtener el texto contenido en el elemento almacenado. La función get_attribute() nos entrega la data relativa al atributo solicitado. La función click() simula la interacción del click en el elemento.

elem = driver.find_element(By.PARTIAL_LINK_TEXT, "Downloa")

elem.text

#'Downloads'

elem.get_attribute('href')

#'https://www.python.org/downloads/'

elem.click()

21 of 21

Esperas.

06

# El uso de ‘WebDriverWait(driver, 10).until()ofrece la posibilidad de esperar que un elemento esté presente en la web en la que se trabaja. Así, evita un error en relación a la búsqueda de un elemento que no se encuentra (aún). Una alternativa es la función implicity_wait(), esta utiliza un tiempo fijo de espera.

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

driver.get('https://www.laborum.cl/empleos-busqueda-data.html')

elem = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "listado-avisos")))

driver.implicitly_wait(10)