Bienvenido a nuestra otra serie de tutoriales sobre web scraping con Python. ¡Si estás leyendo esto y has seguido la Parte 1 y la Parte 2, entonces felicidades! Hoy, vamos a hacer API web scraping con Python. Creo que el raspado web basado en la API es la cosa más fácil, que vamos a hacer en su vida. Vamos a tratar con tokens, sesiones, cabeceras y datos de formulario. En definitiva, el aprendizaje de hoy se llamará API web scraping Python.
El sitio web que vamos a raspar es un sitio web de intercambio de datos basado en API, llamado nepse-data . El único objetivo de utilizar esta web es la educación y el aprendizaje.
API web scraping con Python
Espero que sepáis cómo crear un entorno virtual y los paquetes necesarios para esta tarea, si no es así podéis consultar los enlaces dados. Así que vamos a empezar a hackear el sistema.
Analizando el sitio web
Analizar un sitio web es la parte más importante del web scraping. Por eso voy a explicar todo el proceso.
Inspeccionar el elemento
Para esta tarea utilizaremos Inspect Element, espero que sepas cómo hacerlo. Si no es así, utiliza CTRL+SHIFT+I
Acceso a los datos del formulario de la API
Para obtener más información sobre la función de la API, debemos consultar los Datos de formulario. Además, nos ayuda a estructurar nuestras cabeceras post-request.
De la información anterior, Form Data tenemos la idea de las cabeceras
# Request headers: https://nepsealpha.com/nepse-data
{
‘symbol’: ‘NEPSE’,
‘specific_date’: ‘2021-10-05’,
‘start_date’: ‘2021-09-15’,
‘end_date’: ‘2021-10-05’,
‘filter_type’: ‘date-range’,
‘_token’: token
}
Más tarde, vamos a utilizar los tokens dinámicos, así que dejé un nombre de variable allí. Además, sabíamos que https://nepsealpha.com/nepse-data
es la URL que gestiona las peticiones GET
y POST
.
Usando sesiones de solicitud para la respuesta de la API
La sesión es un conjunto de información donde se almacenan todas las actividades de la web. Por lo tanto, el uso de la sesión y hacer peticiones a través de ella, hace que nuestras peticiones sean de tipo genuino.
import requests
import bs4url = ‘https://nepsealpha.com/nepse-data’
session = requests.Session()
response = session.get(url)
Así que, aquí iniciamos una sesión con requests.Session()
, e hicimos una GET-request
bajo esa sesión.
También usaremos Beautifulsoup
más adelante.
Scraping token information
Ahora, necesitamos el código de token
creado dentro de la sesión actual. Para ello, necesitamos rasparlo, con Beautifulsoup4 y algo de magia de Python.
# Getting token codesoup = bs4.BeautifulSoup(response.text, 'html5lib') form = soup.find('form', {'id': 'logout-form'}) # this will return the token we wanted token = form.find('input', {'name':'_token'})['value']
Solicitud POST a la API
Como tenemos la información de las cabeceras, podemos enviar fácilmente una POST-request
dentro de la misma sesión. Debido a la misma sesión, nuestra POST-request
será reconocida como una petición válida. Estamos enviando token-code
genuino dentro de la sesión, por eso somos increíbles.
# Scraped API in Python – Datadata_response = session.post(url, { 'symbol': 'NEPSE', 'specific_date': '2021-10-05', 'start_date': '2021-09-15', 'end_date': '2021-10-05', 'filter_type': 'date-range', '_token': token } ) print(data_response.json())
Aquí están los datos JSON limpios, aprende a obtener datos JSON limpios.
# Clean JSON result { "data": [ { "symbol": "NEPSE", "open": "2569.79", "high": "2620.32", "low": "2569.78", "close": "2612.65", "f_date": "2021-10-05", "percent_change": "1.43", "volume": "2996819683.01" }, { "symbol": "NEPSE", "open": "2577.36", "high": "2596.67", "low": "2542.09", "close": "2570.81", "f_date": "2021-10-04", "percent_change": "-0.47", "volume": "3627799935.4" }, ..., { "symbol": "NEPSE", "open": "2933.23", "high": "2936.89", "low": "2881.53", "close": "2889.03", "f_date": "2021-09-15", "percent_change": "-1.44", "volume": "5358097250.54" } ] }
Eso es todo lo que hicimos.