Aprenda a realizar raspado web con Python con el fin de recopilar datos de múltiples sitios web rápidamente, ahorrándole tiempo y esfuerzo.
El raspado web consiste en extraer datos de la Web. Específicamente, un raspador web es una herramienta que puede realizar el raspado web. Python es uno de los lenguajes de programación más sencillos y viene con una amplia variedad de bibliotecas de raspado web. Esto lo convierte en el lenguaje de programación perfecto para el raspado web. El raspado web en Python sólo requiere unas pocas líneas de código.
En este tutorial paso a paso, aprenderá a construir un sencillo raspador de datos en Python. Esta aplicación recorrerá todo un sitio web, extraerá datos de cada página y los exportará a un archivo CSV. El tutorial le ayudará a entender cuáles son las mejores bibliotecas de raspado de datos de Python, cuáles adoptar y cómo utilizarlas. Siga este tutorial paso a paso y aprenda a construir un script Python de raspado web.
Tabla de contenidos:
- Requisitos previos
- Las mejores bibliotecas de Python para raspado web
- Construcción de un raspador web en Python
- Conclusión
- Preguntas frecuentes
Requisitos previos
Para construir un raspador web en Python, es necesario cubrir los siguientes prerrequisitos:
- Python 3.4+
- pip
Tenga en cuenta que pip se incluye por defecto en Python versión 3.4 o posterior. Por lo tanto, no es necesario instalarlo manualmente. Si no tiene Python en su ordenador, siga la siguiente guía para su sistema operativo.
macOS
Las Mac solían venir con Python 2.7 preinstalado, pero ya no es el caso. De hecho, esa versión está obsoleta.
Si quiere la última versión de Python, debe instalarla manualmente. Para ello, descargue el instalador, haga doble clic sobre él para iniciarlo y siga el asistente de instalación.
Windows
Descargue el instalador de Python y ejecútelo. Durante el asistente de instalación, asegúrese de marcar la casilla “Añadir python.exe a PATH” como se indica a continuación:
De esta forma, Windows reconocerá automáticamente los comandos python y pip en la terminal. En detalle, pip es un gestor de paquetes para paquetes Python.
Linux
La mayoría de las distribuciones de Linux tienen Python preinstalado, pero puede que no sea la última versión. El comando para instalar o actualizar Python en Linux cambia dependiendo del gestor de paquetes. En las distribuciones Linux basadas en Debian, ejecute:
sudo apt-get install python3
Independientemente de su sistema operativo, abra la terminal y compruebe que Python se ha instalado correctamente con:
python --version
Esto debería imprimir algo como:
Python 3.11.0
Ahora está listo para construir su primer raspador web Python. Pero primero, ¡necesita una biblioteca Python de raspado web!
Las mejores bibliotecas de Python para raspado web
Puede construir un script de raspado web desde cero con Python vanilla, pero esa no es la solución ideal. Después de todo, Python es bien conocido por su amplia selección de paquetes y hay muchas bibliotecas de raspado web para elegir. Es hora de echar un vistazo a las más importantes.
Peticiones
La librería requests permite realizar peticiones HTTP en Python. Hace que el envío de peticiones HTTP sea fácil, especialmente en comparación con la biblioteca HTTP estándar de Python. requests juega un papel clave en un proyecto de raspado web en Python. La razón es que para raspar los datos contenidos en una página web, primero hay que recuperarlos a través de una petición HTTP GET. Además, es posible que tenga que realizar otras peticiones HTTP al servidor del sitio web de destino.
Puede instalar peticiones con el siguiente comando pip:
pip install requests
Beautiful Soup
La librería Beautiful Soup de Python facilita el raspado de información de páginas web. En particular, Beautiful Soup funciona con cualquier analizador HTML o XML y proporciona todo lo necesario para iterar, buscar y modificar el árbol de análisis sintáctico. Tenga en cuenta que es posible usar Beautiful Soup con html.parser, el analizador que viene con la Librería Estándar de Python y que le permite analizar archivos de texto HTML. En particular, Beautiful Soup le ayuda a recorrer el DOM y extraer los datos que es necesario de él.
Se puede instalar Beautiful Soup con pip de la siguiente manera:
pip install beautifulsoup4
Selenium
Selenium es un marco de pruebas automatizado, avanzado y de código abierto que permite ejecutar operaciones en una página web en un navegador. En otras palabras, puede utilizar Selenium para ordenar a un navegador que realice determinadas tareas. Tenga en cuenta que también puede utilizar Selenium como una biblioteca de raspado web debido a sus capacidades de navegador sin interfaz gráfica (headless browser). Si no está familiarizado con este concepto, un navegador headless es un navegador web que se ejecuta sin una GUI (Interfaz Gráfica de Usuario). Si se configura en modo libre de interfaz gráfica, Selenium ejecutará el navegador entre bastidores.
Las páginas web visitadas en Selenium se renderizan en un navegador real. Como resultado, es compatible con el raspado de páginas web que dependen de JavaScript para la renderización o la recuperación de datos. Selenium le equipa con todo lo que es necesario para construir un raspador web, sin necesidad de otras librerías. Puede instalarlo con el siguiente comando pip:
pip install selenium
Construyendo un Web Scraper en Python
Aprendamos ahora a construir un raspador web en Python. Este es el aspecto del sitio objetivo:
Este es el sitio de Quotes to Scrape, un sandbox para raspado web que contiene una lista paginada de citas.
El objetivo de este tutorial es aprender a extraer todos los datos de las citas. Aprenderá cómo raspar el texto, autor, y la lista de etiquetas para cada cita. Luego los datos raspados se convertirán a CSV.
Como puede ver, Quotes to Scrape no es más que un cajón de arena (sandbox) para el raspado web. En concreto, contiene una lista paginada de citas. El web scraper de Python que va a construir recuperará todas las citas contenidas en cada página y las devolverá como datos CSV.
Paso 1: Elegir las bibliotecas Python adecuadas para el raspado web
En primer lugar, es necesario comprender cuáles son las mejores bibliotecas de raspado web en Python para lograr el objetivo. Para ello, visite el sitio de destino en el navegador del sitio. Haga clic con el botón derecho en el fondo y seleccione “Inspeccionar“. Se abrirá la ventana del navegador DevTools. Vaya a la pestaña Red y vuelva a cargar la página.
Como observará, el sitio web de destino no realiza ninguna solicitud Fetch/XHR.
Esto significa que Quotes to Scrape no depende de JavaScript para recuperar datos de forma dinámica. En otras palabras, las páginas devueltas por el servidor ya contienen los datos de interés. Esto es lo que ocurre en los sitios de contenido estático.
Dado que el sitio web de destino no depende de JavaScript para renderizar la página o recuperar datos, no necesita Selenium para raspar datos. Puede seguir utilizándolo, pero no debería. La razón es que Selenium abre las páginas web en un navegador. Dado que esto requiere tiempo y recursos, Selenium genera un problema de rendimiento. Puede evitarlo usando Beautiful Soup junto con Requests.
Ahora que ya sabe qué bibliotecas de raspado web de Python utilizar, ¡aprenda a crear un raspador de datos sencillo con Beautiful Soup!
Paso 2: Inicializar un proyecto Python
Antes de escribir la primera línea de código, es necesario configurar su proyecto Python de raspado web. Técnicamente, sólo es necesario un único archivo .py. Sin embargo, el uso de un IDE avanzado (Entorno de Desarrollo Integrado) hará que su experiencia de codificación sea más fácil. Aquí, usted va a aprender cómo configurar un proyecto de Python en PyCharm, pero cualquier otro IDE de Python servirá.
Abre PyCharm y selecciona “Archivo > Nuevo Proyecto…“. En la ventana emergente “Nuevo proyecto“, seleccione “Pure Python” y cree un nuevo proyecto.
Por ejemplo, puede llamar a su proyecto python-web-scraper. Haga clic en “Crear” y ahora tendrá acceso a su proyecto Python en blanco. Por defecto, PyCharm inicializará un archivo main.py. Para mayor claridad, cámbiele el nombre a scraper.py. Este es el aspecto que tendrá su proyecto:
Como se puede ver, PyCharm inicializa automáticamente el archivo Python con algunas líneas de código. Elimínelas para empezar desde cero.
A continuación, es necesario instalar las dependencias del proyecto. Se puede instalar Requests y Beautiful Soup lanzando el siguiente comando en la terminal:
pip install requests beautifulsoup4
Esto instalará las dos bibliotecas a la vez. Espere a que el proceso de instalación se complete. Ahora puede utilizar Beautiful Soup y Requests para construir su rastreador web y raspador de datos en Python. Asegúrese de importar las dos librerías añadiendo las siguientes líneas al principio de su archivo scraper.py:
import requests
from bs4 import BeautifulSoup
PyCharm mostrará estas dos líneas en gris porque las bibliotecas no se utilizan en el código. Si las subraya en rojo, significa que algo fue incorrecto durante el proceso de instalación. En este caso, intente instalarlas de nuevo.
¡Estupendo! Ahora está listo para empezar a escribir algo de lógica Python de raspado web.
Paso 2: Conectarse a la URL de destino
Lo primero que hay que hacer en un raspador de datos es conectarse al sitio web de destino. En primer lugar, recupere la URL completa de la página de destino desde su navegador web. Asegúrese de copiar también la sección del protocolo HTTP http:// o https://. En este caso, se trata de la URL completa del sitio web de destino:
https://quotes.toscrape.com
Ahora, puede utilizar peticiones para descargar una página web con la siguiente línea de código:
page = requests.get('https://quotes.toscrape.com')
Esta línea simplemente asigna el resultado del método request.get()
a la variable page. Entre bastidores, request.get() realiza una petición GET utilizando la URL pasada como parámetro. Después, devuelve un objeto Response que contiene la respuesta del servidor a la petición HTTP.
Si la petición HTTP se ejecuta correctamente, page.status_code contendrá 200. El código de respuesta de estado HTTP 200 OK indica que la solicitud HTTP se ejecutó correctamente. El código de respuesta de estado HTTP 200 OK indica que la solicitud HTTP se ha ejecutado correctamente. Un código de estado HTTP 4xx o 5xx representará un error. Esto puede ocurrir por varias razones, pero tenga en cuenta que la mayoría de los sitios web bloquean las peticiones que no contienen un User-Agent válido. Esa cabecera especial es una cadena que caracteriza la aplicación y la versión del sistema operativo de donde procede una petición. Más información sobre User-Agent para raspado web.
Puede establecer una cabecera User-Agent válida en las peticiones de la siguiente manera:
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
}
page = requests.get('https://quotes.toscrape.com', headers=headers
requests ejecutará ahora la petición HTTP con las cabeceras pasadas como parámetro.
A lo que debe prestar atención es a la propiedad page.text
. Esta contendrá el documento HTML devuelto por el servidor en formato cadena. Introduzca la propiedad text
en Beautiful Soup para extraer datos de la página web. Vamos a aprender cómo.
A lo que debe prestar atención es a la propiedad page.text. Esta contendrá el documento HTML devuelto por el servidor en formato cadena. Introduzca la propiedad text en Beautiful Soup para analizar la página web. ¡Vamos a aprender cómo en el siguiente paso!
Paso 3: Analizar el contenido HTML
Para analizar el documento HTML devuelto por el servidor tras la petición GET, pase page.text al constructor BeautifulSoup()
:
soup = BeautifulSoup(page.text, 'html.parser')
El segundo parámetro especifica el parser (analizador) que Beautiful Soup utilizará.
La variable soup contiene ahora un objeto BeautifulSoup. Se trata de una estructura de árbol generada a partir del análisis del documento HTML contenido en page.text con el analizador html.parser incorporado en Python.
Ahora es posible usarlo para seleccionar el elemento HTML deseado de la página. ¡Observe cómo!
Paso 4: Seleccionar elementos HTML con Beautiful Soup
Beautiful Soup ofrece varios enfoques para seleccionar elementos del DOM. Los puntos de partida son
- find(): Devuelve el primer elemento HTML que coincida con la estrategia del selector de entrada, si existe.
- find_all(): Devuelve una lista de elementos HTML que coinciden con la condición del selector pasada como parámetro.
En función de los parámetros introducidos en estos dos métodos, buscarán elementos en la página de diferentes maneras. En concreto, se pueden seleccionar elementos HTML.
- Por etiqueta:
# get all <h1> elements
# on the page
h1_elements = soup.find_all('h1')
- Por id:
# get the element with id="main-title"
main_title_element = soup.find(id='main-title')
- Por texto:
# find the footer element
# based on the text it contains
footer_element = soup.find(text={'Powered by WordPress'})
- Por atributo:
# find the email input element
# through its "name" attribute
email_element = soup.find(attrs={'name': 'email'})
- Por clase:
# find all the centered elements
# on the page
centered_element = soup.find_all(class_='text-center')
Concatenando estos métodos, es posible extraer cualquier elemento HTML de la página. Eche un vistazo al siguiente ejemplo:
# get all "li" elements
# in the ".navbar" element
soup.find(class_='navbar').find_all('li')
Para hacer las cosas más fáciles, Beautiful Soup también tiene el método select(). Esto le permite aplicar un selector CSS directamente:
# get all "li" elements
# in the ".navbar" element
soup.select('.navbar > li')
Tenga en cuenta que los selectores XPath no tienen soporte al momento en que esto se escribe.
Lo que es importante aprender es que para extraer datos de una página web, primero debe identificar los elementos HTML de interés. En particular, debe definir una estrategia de selección para los elementos que contienen los datos que desea extraer.
Es posible conseguirlo utilizando las herramientas de desarrollo que ofrece su navegador. En Chrome, haga clic con el botón derecho del ratón en el elemento H que le interese y seleccione la opción “Inspeccionar”. En este caso, realizarlo en un elemento quote.
Como se puede ver, el elemento HTML quote <div> se identifica por la clase quote. Contiene:
- El texto de la cita en un elemento HTML <span>.
- El autor de la cita en un elemento HTML <small>.
- Una lista de etiquetas en un elemento <div>, cada una contenida en un elemento HTML <a>.
En detalle, puede extraer estos datos utilizando los siguientes selectores CSS en .quote:
.text
.author
.tags .tag
Paso 5: Extraer datos de los elementos
En primer lugar, es necesario una estructura de datos donde almacenar los datos extraídos. Para ello, inicialice una variable array.
quotes = []
A continuación, utilice soup para extraer los elementos citados del DOM aplicando el selector CSS .quote definido anteriormente:
quote_elements = soup.find_all('div', class_='quote')
El método find_all() devolverá la lista de todos los elementos HTML identificados por la clase quote. Iterar sobre la lista de citas para recuperar los datos de la cita como se indica a continuación:
for quote_element in quote_elements:
# extract the text of the quote
text = quote_element.find('span', class_='text').text
# extract the author of the quote
author = quote_element.find('small', class_='author').text
# extract the tag <a> HTML elements related to the quote
tag_elements = quote_element.select('.tags .tag')
# store the list of tag strings in a list
tags = []
for tag_element in tag_elements:
tags.append(tag_element.text)
El método find() de Beautiful Soup recuperará el único elemento HTML de interés. Dado que las cadenas de etiquetas asociadas a la cita son más de una, deberá almacenarlas en una lista.
A continuación, puede transformar los datos raspados en un diccionario y añadirlo a la lista de citas de la siguiente manera:
quotes.append(
{
'text': text,
'author': author,
'tags': ', '.join(tags) # merge the tags into a "A, B, ..., Z" string
}
)
Almacenar los datos en un diccionario estructurado facilita su acceso y comprensión.
¡Genial! ¡Acaba de aprender a extraer todos los datos de citas de una sola página! No obstante, tenga en mente que el sitio web objetivo contiene varias páginas web. ¡Es momento de aprender a recopilar datos del sitio web entero!
Paso 6: Implementar la lógica de rastreo
En la parte inferior de la página de inicio, encontrará un elemento “Next →” HTML que redirige a la página siguiente. Este elemento HTML se encuentra en todas las páginas excepto en la última. Este escenario es común en cualquier sitio web paginado.
Siguiendo el enlace contenido en ese elemento HTML, puede navegar fácilmente por todo el sitio web. Así pues, empiece por la página de inicio y vea cómo recorrer cada una de las páginas en el sitio web de destino. Todo lo que tiene que hacer es buscar el elemento HTML .next
Se puede implementar la lógica de recopilación como se muestra a continuación:
# the URL of the home page of the target website
base_url = 'https://quotes.toscrape.com'
# retrieve the page and initializing soup...
# get the "Next →" HTML element
next_li_element = soup.find('li', class_='next')
# if there is a next page to scrape
while next_li_element is not None:
next_page_relative_url = next_li_element.find('a', href=True)['href']
# get the new page
page = requests.get(base_url + next_page_relative_url, headers=headers)
# parse the new page
soup = BeautifulSoup(page.text, 'html.parser')
# scraping logic...
# look for the "Next →" HTML element in the new page
next_li_element = soup.find('li', class_='next')
El ciclo where itera sobre cada página hasta que no hay siguiente. En concreto, extrae el URL relativo de la página siguiente y lo utiliza para crear el URL de la página siguiente a rastrear.
A continuación, descarga la siguiente página Después, raspa los datos y repite la lógica.
¡Fantastico! Ya sabe cómo raspar datos de un sitio web entero. Sólo queda aprender a convertir los datos extraídos a un formato más útil, por ejemplo.
Paso 7: Extraer los datos raspados a un archivo
Veamos cómo exportar a un fichero la lista de diccionarios que contienen los datos de las citas raspadas a un archivo CSV. Las líneas a continuación muestran cómo:
import csv
# scraping logic...
# reading the "quotes.csv" file and creating it
# if not present
csv_file = open('quotes.csv', 'w', encoding='utf-8', newline='')
# initializing the writer object to insert data
# in the CSV file
writer = csv.writer(csv_file)
# writing the header of the CSV file
writer.writerow(['Text', 'Author', 'Tags'])
# writing each row of the CSV
for quote in quotes:
writer.writerow(quote.values())
# terminating the operation and releasing the resources
csv_file.close()
Lo que hace este snippet es escribir los datos de citas contenidos en la lista de diccionarios en un archivo quotes.csv
. Tenga en cuenta que csv
forma parte de la Librería Estándar de Python. Por tanto, puede importarla y usarla sin instalar una dependencia adicional.
Simplemente es necesario crear un archivo con open()
. Luego, se puede rellenar con la función writerow()
del objeto Writer de la librería csv. Esto escribirá cada diccionario de citas como una fila con formato CSV.
Ha pasado de los datos brutos contenidos en un sitio web a los datos semiestructurados almacenados en un archivo CSV. El proceso de extracción de datos ha terminado y ahora puede echar un vistazo a todo el raspador de datos Python.
Paso 8: Conjuntando todo
Este es el aspecto del script Python de extracción de datos completo:
import requests
from bs4 import BeautifulSoup
import csv
def scrape_page(soup, quotes):
# retrieving all the quote <div> HTML element on the page
quote_elements = soup.find_all('div', class_='quote')
# iterating over the list of quote elements
# to extract the data of interest and store it
# in quotes
for quote_element in quote_elements:
# extracting the text of the quote
text = quote_element.find('span', class_='text').text
# extracting the author of the quote
author = quote_element.find('small', class_='author').text
# extracting the tag <a> HTML elements related to the quote
tag_elements = quote_element.find('div', class_='tags').find_all('a', class_='tag')
# storing the list of tag strings in a list
tags = []
for tag_element in tag_elements:
tags.append(tag_element.text)
# appending a dictionary containing the quote data
# in a new format in the quote list
quotes.append(
{
'text': text,
'author': author,
'tags': ', '.join(tags) # merging the tags into a "A, B, ..., Z" string
}
)
# the url of the home page of the target website
base_url = 'https://quotes.toscrape.com'
# defining the User-Agent header to use in the GET request below
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
}
# retrieving the target web page
page = requests.get(base_url, headers=headers)
# parsing the target web page with Beautiful Soup
soup = BeautifulSoup(page.text, 'html.parser')
# initializing the variable that will contain
# the list of all quote data
quotes = []
# scraping the home page
scrape_page(soup, quotes)
# getting the "Next →" HTML element
next_li_element = soup.find('li', class_='next')
# if there is a next page to scrape
while next_li_element is not None:
next_page_relative_url = next_li_element.find('a', href=True)['href']
# getting the new page
page = requests.get(base_url + next_page_relative_url, headers=headers)
# parsing the new page
soup = BeautifulSoup(page.text, 'html.parser')
# scraping the new page
scrape_page(soup, quotes)
# looking for the "Next →" HTML element in the new page
next_li_element = soup.find('li', class_='next')
# reading the "quotes.csv" file and creating it
# if not present
csv_file = open('quotes.csv', 'w', encoding='utf-8', newline='')
# initializing the writer object to insert data
# in the CSV file
writer = csv.writer(csv_file)
# writing the header of the CSV file
writer.writerow(['Text', 'Author', 'Tags'])
# writing each row of the CSV
for quote in quotes:
writer.writerow(quote.values())
# terminating the operation and releasing the resources
csv_file.close()
Como se muestra aquí, es posible construir un raspador web con menos de 100 líneas de código. Este script Python es capaz de rastrear un sitio web completo, extraer automáticamente todos sus datos y exportarlos a CSV.
Hemos mostrado cómo crear un raspador web en Python con Requests y Beautiful Soup.
Paso 9: Ejecutar el script Python de raspado web
Si eres usuario de PyCharm, ejecuta el script haciendo clic en el botón de abajo:
De lo contrario, ejecute el siguiente comando Python en el terminal dentro del directorio del proyecto:
python scraper.py
Espere a que finalice el proceso, y ahora tendrá acceso a un archivo quotes.csv. Ábralo, debería contener los siguientes datos:
¡Et voilà! Ya tiene las 100 citas contenidas en el sitio web de destino en un único archivo y en un formato fácil de leer.
Conclusión
En este tutorial, ha aprendido qué es el raspado de la Web con Python, qué es necesario para empezar en Python, y cuáles son las mejores librerías de raspado web en Python. Luego, mostramos cómo usar Beautiful Soup y Requests para construir una aplicación de raspado web a través de un ejemplo del mundo real. Como aprendió, el raspado web en Python sólo requiere unas pocas líneas de código.
Sin embargo, el raspado web plantea varios retos. En concreto, las tecnologías antibot y antiraspado se han hecho cada vez más populares. Por eso necesita una herramienta avanzada de raspado web, proporcionada por Bright Data.
Un servidor proxy actúa como intermediario entre tu script de scraping en X y las páginas objetivo. Recibe tus solicitudes, las reenvía al servidor de destino, recibe las respuestas y te las devuelve. De esta manera, el sitio objetivo verá sus IPs y no la tuya. Eso significa ocultar tu IP para preservar su reputación y salvar tu privacidad, evitando prohibiciones y restricciones geográficas. Gracias a los proxies rotativos, puedes obtener IPs nuevas en cada solicitud para sortear incluso sistemas de limitación de tasa.
Solo queda seleccionar un proveedor confiable que pueda darte acceso a servidores proxy de primera calidad con IPs de buena reputación. Bright Data es el proveedor de proxies más popular del mundo, sirviendo a docenas de empresas Fortune 500 y más de 20,000 clientes. Su red de proxies a nivel mundial incluye
- Proxies de centro de datos – Más de 770,000 IPs procedentes de centros de datos.
- Proxies residenciales – Más de 72 millones de IPs de dispositivos residenciales en más de 195 países.
- Proxies de ISP – Más de 700,000 IPs de dispositivos registrados por ISP.
- Proxies móviles – Más de 7 millones de IPs de redes móviles.
No se requiere tarjeta de crédito
Preguntas frecuentes
¿Es Python un buen lenguaje para el raspado web?
Python no sólo es una buena opción para el raspado web, sino que se considera uno de los mejores lenguajes para ello. Esto se debe a su facilidad de lectura y a su baja curva de aprendizaje. Además, cuenta con una de las comunidades más grandes del mundo de la informática y una amplia selección de bibliotecas y herramientas diseñadas para el raspado web.
¿El raspado web y el crawling forman parte de la ciencia de datos?
Sí, el raspado web y el crawling forman parte de la ciencia de datos. El raspado web y el crawling sirven de base para todos los demás subproductos que pueden derivarse de datos estructurados y no estructurados. Esto incluye análisis, modelos algorítmicos/resultados, percepciones y “conocimiento aplicable”.
¿Cómo se extraen datos específicos de un sitio web en Python?
Extraer datos de un sitio web con Python implica inspeccionar la página de la URL de destino, identificar los datos que desea extraer, escribir y ejecutar el código de extracción de datos y, por último, almacenar los datos en el formato deseado.
¿Cómo se construye un raspador web con Python?
El primer paso para construir un raspador de datos en Python es utilizar métodos de cadena para analizar los datos de la página web, luego analizar los datos de la página web utilizando un analizador HTML, y finalmente interactuar con los formularios necesarios y los componentes de la página web.