<h1>Uso de APIS y Selenium.</h1>
Minería de medios sociales y Ciencia de Redes.
<ayudante>�Jan Dimter Stránský.�</ayudante>
<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>
<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>
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>
<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>
<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>
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
...
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
...
<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
Qué pasó con Twitter?
<p> Resumen de los últimos cambios en la plataforma y formas de utilizar la API </p>
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.
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).
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/
Cómo funciona Selenium?
<p> Contextualización e implementación. </p>
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.
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).
Navegación.
02
# La función get() nos servirá para dirigirnos a una url. Las funciones back(), forward() y refresh() nos ayudarán con la navegación.
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.
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)
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()
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)