Skip to content

MyTechyBlogs

Aprende a codificar, Linux, Python y más de negocios.

Menu
  • Página de inicio
  • Negocios
  • Codificación
  • Linux
  • Python
Menu
Raspar un sitio basado en la API con Python

Raspar un sitio basado en la API con Python

Posted on June 8, 2022 by admin

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 bs4

url = ‘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 code
soup = 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 – Data
data_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.

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Enlaces útiles

  • Condiciones de uso
  • Contacte con
  • Descargo de responsabilidad
  • Política de privacidad
©2022 MyTechyBlogs | Built using WordPress and Responsive Blogily theme by Superb