{"id":165115,"date":"2026-01-28T11:26:42","date_gmt":"2026-01-28T10:26:42","guid":{"rendered":"https:\/\/liora.io\/es\/?p=165115"},"modified":"2026-02-25T14:10:12","modified_gmt":"2026-02-25T13:10:12","slug":"beautiful-soup-aprender-web-scraping","status":"publish","type":"post","link":"https:\/\/liora.io\/es\/beautiful-soup-aprender-web-scraping","title":{"rendered":"Beautiful Soup : \u00bfc\u00f3mo aprender a hacer web scraping en Python?"},"content":{"rendered":"\n<p><strong>Como usuario de Internet, uno tiene acceso a mucha informaci\u00f3n sobre clientes, ofertas, cotizaciones de acciones, fen\u00f3menos f\u00edsicos, etc. Los usuarios pueden leer estos datos, pero nos gustar\u00eda poder explotarlos transform\u00e1ndolos en un formato operativo para finalmente analizarlos y aprovecharlos. El web scraping es la t\u00e9cnica que permite extraer esta informaci\u00f3n en un formato que pueda ser utilizado por los programas inform\u00e1ticos. En este art\u00edculo descubriremos c\u00f3mo hacerlo con Beautiful Soup.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-para-que-sirve-beautiful-soup\">\u00bfPara qu\u00e9 sirve Beautiful Soup?<\/h2>\n\n\n\n<p>Por ejemplo, es posible que se quiera tener acceso a todas las rese\u00f1as de un paquete de cartuchos de tinta negra HP en Amazon para poder hacer un an\u00e1lisis sint\u00e1ctico, sem\u00e1ntico y de sentimientos, y hacerse una opini\u00f3n propia. <b>El web scraping<\/b> a partir de un localizador de tiendas (por ejemplo, un mapa) puede utilizarse para crear una lista de ubicaciones de negocios. Tambi\u00e9n se pueden obtener las cotizaciones de las acciones para tomar mejores decisiones de inversi\u00f3n.<\/p>\n\n\n\n<p>En cuanto a la parte de <b>an\u00e1lisis de datos<\/b>, existen t\u00e9cnicas espec\u00edficas para cada tipo de datos y cada objetivo. El siguiente diagrama muestra el proceso log\u00edstico que conduce a una decisi\u00f3n informada :<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-style-not-rounded\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\"><img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/2022\/03\/schema_webscraping.png\" alt=\"\" \/><\/figure>\n\n\n\n<p>Si estamos en <b>la fase de recogida de datos<\/b>, nos gustar\u00eda tener acceso a toda la informaci\u00f3n de una p\u00e1gina web para poder realizar el estudio deseado.<\/p>\n\n\n\n<p>Para ello, tenemos la posibilidad de copiarla \u00aba mano\u00bb en otro documento. Pero se trata de una tarea minuciosa, ya que puede llevar mucho tiempo, por no hablar de las erratas que pueden producirse durante la introducci\u00f3n de datos. Como se ha mencionado en la introducci\u00f3n, <b>el web scraping<\/b> permite acceder a esta informaci\u00f3n en un formato utilizable.<\/p>\n\n\n\n<p>Para la segunda fase, se recurre a los conocimientos t\u00e9cnicos de los <b>Data Analysts<\/b>, <b>Data Engineers<\/b> o <b>Data Scientists<\/b> para establecer los algoritmos y estudios estad\u00edsticos pertinentes. <\/p>\n\n\n\n<p>Por ejemplo, en el caso de analizar los comentarios sobre un producto, se puede utilizar un algoritmo de PNL, que permite a las m\u00e1quinas entender el lenguaje humano.<\/p>\n\n\n\n<p>La interpretaci\u00f3n de los datos suele hacerse en equipo, teniendo en cuenta la opini\u00f3n <b>de especialistas en la materia<\/b> (por ejemplo, teniendo en cuenta la opini\u00f3n del m\u00e9dico si se trabaja en un proyecto con datos m\u00e9dicos), para llegar finalmente a <b>una toma de decisi\u00f3n \u00f3ptima.<\/b> En este art\u00edculo, nos centraremos en la fase 1, ya que nos interesa <b>la recuperaci\u00f3n de datos<\/b>. En el siguiente p\u00e1rrafo, veremos una aplicaci\u00f3n de la librer\u00eda <b>Beautiful Soup<\/b> que permite hacer <b>web scraping<\/b> en Python.<\/p>\n\n\n\n<p>En el siguiente p\u00e1rrafo, veremos una biblioteca que permite hacer web scraping y que est\u00e1 disponible en <b>Python<\/b> y que constituye una herramienta excelente (y f\u00e1cil de manejar) para extraer informaci\u00f3n de <b>datos no estructurados <\/b>: Beautiful Soup.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-presentacion-de-beautiful-soup\">Presentaci\u00f3n de Beautiful Soup<\/h2>\n\n\n\n<p>La biblioteca Beautiful Soup permite extraer contenido y transformarlo en una lista, matriz o diccionario de Python.<\/p>\n\n\n\n<p>Esta biblioteca es muy popular porque tiene una <b>documentaci\u00f3n completa<\/b> y <b>sus funcionalidades est\u00e1n bien estructuradas<\/b>. Adem\u00e1s, existe una gran comunidad que ofrece soluciones variadas para utilizar esta biblioteca.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-por-que-se-llama-beautiful-soup\">\u00bfPor qu\u00e9 se llama \u00abBeautiful Soup\u00bb?<\/h2>\n\n\n\n<p>Los sitios web est\u00e1n <b>escritos en lenguajes inform\u00e1ticos HTML y CSS<\/b>, que se utilizan para dise\u00f1ar p\u00e1ginas web. HTML se utiliza para gestionar y organizar el contenido. La gesti\u00f3n de la apariencia de la p\u00e1gina web (colores, tama\u00f1o del texto, etc.) se realiza mediante <b>el lenguaje CSS<\/b>.<\/p>\n\n\n\n<p>En el campo del desarrollo web, \u00ab<b>tag soup<\/b>\u00bb (\u00absopa de etiquetas\u00bb) es un t\u00e9rmino despectivo para hablar de la escritura sint\u00e1ctica o estructuralmente incorrecta del HTML de una p\u00e1gina web.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-un-ejemplo-de-web-scraping-con-beautiful-soup\">Un ejemplo de web scraping con Beautiful soup<\/h2>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"Comment fonctionne le Web Scraping ?\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/NBMITIGtIwA?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>Pongamos un ejemplo sencillo para familiarizarnos con estos conceptos. El siguiente ejemplo ha sido tomado de <b>Kaggle<\/b> y el objetivo es hacer un raspado o <i>scraping<\/i> de datos sobre la poblaci\u00f3n del mundo. Los datos est\u00e1n disponibles en el sitio de <b>Worldometer<\/b>, un sitio de c\u00f3digo abierto dirigido por un equipo internacional de desarrolladores e investigadores voluntarios, cuyo objetivo es poner las estad\u00edsticas globales a disposici\u00f3n de un amplio p\u00fablico en todo el mundo.<\/p>\n\n\n\n<p>Esta es una visi\u00f3n general de la p\u00e1gina que vamos a raspar<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\"><img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/2022\/03\/beautifulsoup.png\" alt=\"\" title=\"\" \/><\/figure>\n\n\n\n<p>Nuestro objetivo es obtener esta tabla y convertirla en un <b>DataFrame<\/b> sin tener que copiar todos estos datos a mano.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>En un <b>Jupyter Notebook<\/b> primero importamos las bibliotecas necesarias.<\/li>\n\n\n\n<li>A continuaci\u00f3n, creamos una variable URL en formato string (texto) que contiene el enlace a la p\u00e1gina en cuesti\u00f3n.<\/li>\n\n\n\n<li>Para preparar los datos, utilizamos la funci\u00f3n <b>requests.get() <\/b>:<\/li>\n\n\n\n<li>Ahora que los datos est\u00e1n preparados, se utiliza la funci\u00f3n <b>BeautifulSoup()<\/b> para extraer el c\u00f3digo HTML de esta p\u00e1gina. En el argumento de esta funci\u00f3n seleccionaremos el objeto <b>.text<\/b>.<\/li>\n\n\n\n<li>En los datos variables que almacenamos el c\u00f3digo HTML buscamos la palabra clave \u00abtable\u00bb con la funci\u00f3n <b>.find_all()<\/b>:<\/li>\n\n\n\n<li>Utilizamos el comando <b>.read_html(str())<\/b> para que la m\u00e1quina lea el c\u00f3digo HTML y luego recuperamos el primer y \u00fanico elemento de este objeto (el array).<\/li>\n\n\n\n<li>\u00c0 pr\u00e9sent on affiche les premiers\u00a0 \u00e9l\u00e9ments, commande <b>.head()<\/b> du DataFrame :<\/li>\n\n\n\n<li>\u00a0La base de datos tambi\u00e9n se puede exportar en formato <b>csv<\/b> con el siguiente comando :<\/li>\n<\/ul>\n\n\n\n<p>Este comando crea un archivo en <b>formato csv<\/b> ubicado en la ruta indicada.<\/p>\n\n\n\n<p>Para facilitar la manipulaci\u00f3n del <b>DataFrame<\/b>, podemos pensar en cambiar los nombres de las columnas o eliminar algunas de ellas si no las utilizamos.<\/p>\n\n\n\n<p>Ahora que hemos podido obtener los datos que se han puesto a disposici\u00f3n en el sitio de <b>Worldometer<\/b> y que est\u00e1n en formato <b>DataFrame<\/b>, podemos pasar a los dem\u00e1s pasos y hacer diferentes estudios. A continuaci\u00f3n, podemos emprender el resto del proceso (Fases 2, 3 y 4, v\u00e9ase el diagrama de la introducci\u00f3n). En funci\u00f3n de la naturaleza de los datos y de los objetivos que se pretenden alcanzar, se pueden realizar diferentes estudios: <b>an\u00e1lisis<\/b> <b>exploratorio<\/b>, propuesta de un modelo de <b>Machine Learning<\/b>, modelizaci\u00f3n de series temporales, etc.<\/p>\n\n\n\n<p>Acabamos de ver un ejemplo que nos permite recuperar datos almacenados en una tabla, pero es importante recordar que dependiendo de la estructura de la p\u00e1gina web en la que queramos raspar los datos, utilizaremos diferentes bibliotecas y funciones. La buena noticia es que hay muchos ejemplos disponibles en Internet en funci\u00f3n del formato de la p\u00e1gina y de la configuraci\u00f3n de los datos que se quieren raspar.<\/p>\n\n\n\n<p>Para resumir, <b>el web scraping<\/b> permite navegar por Internet de forma \u00ab<b>inteligente<\/b>\u00bb y, por tanto, es un recurso muy rico para cualquier \u00e1rea de investigaci\u00f3n o inter\u00e9s personal.<\/p>\n\n\n\n<p>El curso de <b>Data Analyst de Liora <\/b>te permite aprender y practicar las habilidades de <b>web scraping<\/b> y mucho m\u00e1s. Si quieres aprender sobre an\u00e1lisis de datos y adquirir conocimientos t\u00e9cnicos relacionados con este tema, no dudes en apuntarte al<a href=\"https:\/\/liora.io\/es\/formacion-data-analyst\"> curso de Data Analyst<\/a><\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/liora.io\/es\/formacion-data-analyst\">Descubrir el recorrido<\/a><\/div>\n<\/div>\n\n\n\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\n      \"@type\": \"Question\",\n      \"name\": \"\u00bfPara qu\u00e9 sirve Beautiful Soup?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Beautiful Soup es una librer\u00eda Python para web scraping que extrae contenido de p\u00e1ginas web y lo transforma en listas, matrices o diccionarios. Es popular por su documentaci\u00f3n completa, funciones bien estructuradas y gran comunidad. Ejemplos de uso: obtener rese\u00f1as de productos para an\u00e1lisis sem\u00e1ntico, extraer datos de localizadores de tiendas, capturar cotizaciones de acciones para decisiones de inversi\u00f3n.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Presentaci\u00f3n de Beautiful Soup\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Beautiful Soup es una biblioteca Python para extraer contenido de datos no estructurados y transformarlo en estructuras Python. Es popular por su documentaci\u00f3n completa, funcionalidades bien estructuradas y gran comunidad que ofrece soluciones variadas.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"\u00bfPor qu\u00e9 se llama \u00abBeautiful Soup\u00bb?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"El nombre juega con el t\u00e9rmino 'tag soup' (sopa de etiquetas), usado despectivamente en desarrollo web para referirse a HTML sint\u00e1ctica o estructuralmente incorrecto. Beautiful Soup 'limpia' esa sopa para extraer informaci\u00f3n.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Un ejemplo de web scraping con Beautiful soup\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Proceso con ejemplo de Worldometer: importar librer\u00edas, crear URL variable, usar requests.get(), extraer HTML con BeautifulSoup(), buscar 'table' con find_all(), convertir a DataFrame con read_html(), exportar a CSV. Luego se pueden renombrar\/eliminar columnas y realizar estudios (an\u00e1lisis exploratorio, Machine Learning, series temporales).\"\n      }\n    }\n  ]\n}\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Como usuario de Internet, uno tiene acceso a mucha informaci\u00f3n sobre clientes, ofertas, cotizaciones de acciones, fen\u00f3menos f\u00edsicos, etc. Los usuarios pueden leer estos datos, pero nos gustar\u00eda poder explotarlos transform\u00e1ndolos en un formato operativo para finalmente analizarlos y aprovecharlos. El web scraping es la t\u00e9cnica que permite extraer esta informaci\u00f3n en un formato que pueda ser utilizado por los programas inform\u00e1ticos. En este art\u00edculo descubriremos c\u00f3mo hacerlo con Beautiful Soup.<\/p>\n","protected":false},"author":85,"featured_media":184214,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"editor_notices":[],"footnotes":""},"categories":[2440],"class_list":["post-165115","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-ia"],"acf":[],"_links":{"self":[{"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/posts\/165115","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/users\/85"}],"replies":[{"embeddable":true,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/comments?post=165115"}],"version-history":[{"count":5,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/posts\/165115\/revisions"}],"predecessor-version":[{"id":184217,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/posts\/165115\/revisions\/184217"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/media\/184214"}],"wp:attachment":[{"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/media?parent=165115"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/categories?post=165115"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}