undefined
Blog > Comentarios de Clientes > Post

Web Scraping Sin Complicaciones con Octoparse

Wednesday, August 25, 2021

Recientemente, yo estaba buscando una forma de extraer fácilmente datos de sitios web. De hecho, como todos sabemos, raspar manualmente la web puede convertirse en una tarea tediosa y que requiere mucho tiempo. Mientras buscaba en línea soluciones más inteligentes para evitar estos inconvenientes, me encontré con Octoparse.

foto1

Octoparse es un servicio de web scraping que te permite extraer datos de varios sitios web sin necesidad de código. Como consecuencia, cualquiera puede usar esta herramienta sin código.

Además, proporciona API oficiales para ejecutar tareas de raspado previamente definidas bajo demanda y guardar los datos extraídos en CSV, TXT, Excel, HTML o en bases de datos. De esta manera, puedes tener los beneficios de una herramienta sin código y una herramienta manual avanzada.

Veamos cómo usar Octoparse para crear una tarea de scraping, ejecutarla desde una secuencia de comandos de Python y guardar los datos extraídos en un documento de Google Sheets.

 

Qué es Octoparse

“Octoparse es una herramienta de extracción de datos extremadamente poderosa que ha optimizado y llevado nuestros esfuerzos de extracción de datos al siguiente nivel " — Sitio web oficial de Octoparse

Octoparse es un robusto rastreador de sitios web destinado a extraer todo tipo de datos que necesita de la web. Ofrece un gran conjunto de funciones, que incluyen detección automática, plantillas de tareas y un modo avanzado.

El primero se basa en un algoritmo de detección automática diseñado para raspar automáticamente las páginas que contienen elementos anidados en una lista o tabla. La segunda es una forma sencilla de extraer datos en función de una serie de plantillas prediseñadas que cualquier persona puede emplear sin esfuerzo. Mientras que el tercero es un modo flexible y potente diseñado para aquellos que requieren necesidades más personalizadas.

En cada caso, Octoparse implica una interfaz de apuntar y hacer clic fácil de usar diseñada para guiarte a lo largo del proceso de extracción de datos. Luego, los datos extraídos de varios sitios web se pueden guardar y estructurar fácilmente en muchos formatos.

Además, proporciona una función de extracción programada en la nube para extraer datos dinámicos en tiempo real. Luego, también viene con un programa API, que te mostraré cómo usarlo en breve.

Por otra parte, aunque la herramienta reproduce la actividad humana para comunicarse con las páginas web y evitar ser detectada durante el scraping, también ofrece servidores proxy IP. Se pueden utilizar en caso de sitios web agresivos para ocultar la IP y evitar el bloqueo de IP.

En conclusión, Octoparse satisface la mayoría de las necesidades de scraping de los usuarios, tanto básicas como avanzadas, sin requerir ninguna habilidad de codificación.

 

Crear una Tarea de Extracción de Datos

Supongamos que queremos extraer datos de la página de Wikipedia de la Lista de países y dependencias por población. Este es un buen ejemplo de una página web cuyos datos se actualizan con frecuencia a lo largo del tiempo.

Primero, veremos cómo instalar Octoparse. Luego definiremos una tarea de scraping destinada a extraer datos de la tabla principal de esa página web.

 

1. Empezando con Octoparse

En primer lugar, debes instalar Octoparse. En este tutorial, usaré Octoparse 8.x, que se puede descargar desde aquí: https://www.octoparse.es/download.

Luego, sigue los siguientes pasos:

  1. Descomprimir el archivo instalador descargado
  2. Ejecutar el archivo OctoparseSetup.msi
  3. Seguir las instrucciones de instalación
  4. Iniciar sesión con tu cuenta de Octoparse, o registrarte aquí si aún no tienes una cuenta

Por favor, ten en cuenta que registrarse es gratis, pero para acceder a la función API, se requiere un plan estándar. Puedes encontrar toda la información sobre los planes que ofrece Octoparse aquí.

Ahora, tienes todo lo necesario para comenzar a aprovechar el poder de Octoparse.

 

2. Creando la Tarea

Dado que el objetivo es extraer los datos almacenados en una tabla, es muy recomendable seguir esta guía de la documentación oficial sobre cómo lograrlo.

Inicia Octoparse, inicia sesión, ingresa la URL deseada en el campo principal y haz clic en el botón Inicio. De esta forma, el sistema utilizará el algoritmo de autodetección, que es perfecto para una página formada por una tabla como: Lista de países y dependencias por población.

ingresar url

Ingresando la URL de entrada
Espera a que se cargue la página y se detecten los datos. Cuando se complete la detección automática, sigue las instrucciones proporcionadas en el panel de Consejos y verifica tus datos en la sección de vista previa. Por último, cambia el nombre de los campos de datos o elimina los que no necesitas.
tarea de extraccion final de datos
La tarea final de extracción de datos

Primero, haz clic en el botón Crear flujo de trabajo en el panel de Consejos. En segundo lugar, haz clic en el botón Guardar en la barra superior. Luego, ve a la vista Panel de control y deberías ver la tarea que acabas de definir como en la imagen a continuación:
La vista "Panel de control"
La vista "Panel de control"
Aquí puedes cambiar el nombre de tus tareas, ejecutarlas localmente o en la nube. ¡Misión cumplida! Ahora estás listo para acceder a los datos extraídos. El tutorial podría terminar ahora, pero si deseas ejecutar esta tarea a través de la API, debes hacer clic en la opción API del menú Más> Ejecuciones en la nube.
Accediendo a la opción "API"
Acceder a la opción "API"
Luego, aparecerá otra ventana que presenta tu ID de tarea. Lo necesitarás más tarde, así que recuerda guardarlo en un lugar seguro.
id de tarea
La ventana "ID de tarea"

Ejecución programática de la tarea con Python

Ahora es el momento de profundizar en cómo usar las API de Octoparse para crear un script destinado a ejecutar programáticamente la tarea previamente definida y guardar los datos extraídos en un documento de Google Sheets.

Ten en cuenta que, como se indica en la documentación oficial, este último objetivo solo se puede lograr a través de API. En particular, puedes lograr esto con la siguiente secuencia de comandos de Python:

import sys
  import requests
  import os
  import gspread
  import pandas as pd
   
  def login(base_url, email, password):
  """login and get a access token
   
  Arguments:
  base_url {string} -- authrization base url(currently same with api)
  email {[type]} -- your email
  password {[type]} -- your password
   
  Returns:
  json -- token entity include expiration and refresh token info like:
  {
  "access_token": "ABCD1234", # Access permission
  "token_type": "bearer", # Token type
  "expires_in": 86399, # Access Token Expiration time (in seconds)
  "refresh_token": "refresh_token" # To refresh Access Token
  }
  """
   
  content = 'username={0}&password={1}&grant_type=password'.format(email, password)
  token_entity = requests.post(base_url + 'token', data=content).json()
   
  if 'access_token' in token_entity:
  return token_entity
  else:
  os._exit(-2)
   
  def get_data_by_offset(base_url, token, task_id, offset=0, size=10):
  """offset, size and task ID are all required in the request.
  Offset should default to 0, and size∈[1,1000] for making the initial request.
  The offset returned (could be any value greater than 0) should be used for making the next request.
   
  Arguments:
  base_url {string} -- base url of the api
  token {string} -- token string from a valid token entity
  task_id {string} -- task id of a task from our platform
   
  Keyword Arguments:
  offset {int} -- an offset from last data request, should remains 0 if is the first request (default: {0})
  size {int} -- data row size for the request (default: {10})
   
  Returns:
  json -- task dataList and relevant information:
  {
  "data": {
  "offset": 4,
  "total": 100000,
  "restTotal": 99996,
  "dataList": [
  {
  "state": "Texas",
  "city": "Plano"
  },
  {
  "state": "Texas",
  "city": "Houston"
  },
  ...
  ]
  },
  "error": "success",
  "error_Description": "Action Success"
  }
  """
   
  url = 'api/allData/getDataOfTaskByOffset?taskId=%s&offset=%s&size=%s' % (task_id, offset, size)
  task_data_result = requests.get(base_url + url, headers={'Authorization': 'bearer ' + token}).json()
   
  return task_data_result
   
  def run_countries_task(base_url, token_entity):
  """Running the countries task
   
  Arguments:
  base_url {string} -- API base url
  token_entity {json} -- token entity after logged in
  """
   
  # retrieving an access token after the login
  token = token_entity['access_token']
   
  # your task id
  task_id = "ded69c74-f6d5-b64e-4d2e-c8036a8ec3a8"
   
  # running the task and retrieving data
  data = get_data_by_offset(base_url, token, task_id, offset=0, size=1000)
   
  # retrieving the extracted data in JSON format
  json_extracted_data = data['data']['dataList']
   
  # converting the JSON string to CSV
  df = pd.DataFrame(json_extracted_data)
  csv_extracted_data = df.to_csv(header=True).encode('utf-8')
   
  # check how to get "credentials":
  # https://gspread.readthedocs.io/en/latest/oauth2.html#for-bots-using-service-account
   
  # credentials = ... your credentials
   
  gc = gspread.service_account_from_dict(credentials)
   
  # spreadsheet_id = ... -> your spreadsheet_id
   
  # importing CSV data into your Google Sheet document identified
  # by spreadsheet_id
  gc.import_csv(spreadsheet_id, csv_extracted_data)
   
  if __name__ == '__main__':
  # the email you used to subscribe to Octoparse
  email = "test@email.com"
  # your password
  password = "password"
   
  octoparse_base_url = 'http://advancedapi.octoparse.com/'
  token_entity = login(octoparse_base_url, email, password)
   
  run_countries_task(octoparse_base_url, token_entity)

Primero, se realiza el inicio de sesión, luego se llama a la API Get Data By Offset para iniciar la tarea deseada y recuperar los datos extraídos en formato JSON. Estos datos se convierten a formato CSV y finalmente se importan a un documento de Google Sheets utilizando la biblioteca gspread.

Después de ejecutar el script, podrás ver los datos extraídos por la tarea Octoparse guardados en el documento de Google Sheets seleccionado de la siguiente manera:

El documento de Hojas de cálculo de Google repleto de datos

 

El documento de Google Sheets rellenado con datos

¡Y ahí lo tienes! Objetivo logrado con solo unas pocas líneas de código.

 

Conclusión

En este artículo, analizamos cómo usar Octoparse, una poderosa herramienta de extracción de datos, para crear fácilmente una tarea de raspado. Luego, vimos cómo una tarea de este tipo se puede integrar en un script de Python para ejecutarse mediante programación y guardar los datos extraídos en un documento de Google Sheets. Como se muestra, esto es posible gracias al programa API oficial de Octoparse, que convierte a Octoparse en una herramienta sin código pero muy avanzada.

¡Gracias por leer! Espero que este artículo te haya resultado útil. No dudes en comunicarte conmigo con cualquier pregunta, comentario o sugerencia.

 

Autor: Antonello Zanini

Artículo Original: Web Scraping Made Simple with Octoparse

 

Guía-descargar

Recursos relacionados

9 Desafíos de Web Scraping que Debes Conocer

Cómo Scrapear Datos de una Web a Gran Escala

9 Raspadores Web GRATIS que No Te Puedes Perder en 2021

25 Maneras de Web Scraping Técnicas para Crecer Negocio

10 Malentendidos sobre el Web Scraping

20 Herramientas de Web Scraping para Extraer Datos Rápidamente

¡Descarga Octoparse para comenzar con el web scraping o contáctanos para cualquier
pregunta sobre el web scraping!

Contactarnos Descargar
Usamos cookies para mejorar tu experiencia de navegación. Lee sobre cómo usamos las cookies y cómo puedes controlarlas haciendo clic en la configuración de cookies. Si continúas utilizando este sitio, acepta nuestro uso de cookies.
Aceptar Rechazar