python:webscraping
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| python:webscraping [2024/02/05 14:39] – [Chequeo de errores] alberto | python:webscraping [2024/02/05 19:00] (actual) – [Encontrar elementos] alberto | ||
|---|---|---|---|
| Línea 56: | Línea 56: | ||
| </ | </ | ||
| + | ==== Guardar archivos en el disco duro ==== | ||
| + | Para guardar el archivo descargado, usamos las funciones **open()** y **write()** habituales. \\ | ||
| + | Sólo tenemos que tener en cuenta un par de cosas: | ||
| + | * Deben de abrirse (open) en formato ' | ||
| + | * Usar el método **ither_content(**número de bytes**)**, que divide el archivo en porciones del número de bytes especificado, | ||
| + | |||
| + | En resumen: | ||
| + | - Llamada a requests.get() para descargar el archivo. | ||
| + | - Llamada a open() con ' | ||
| + | - Bucle con el método iter_content(). | ||
| + | - Llamar a write en cada iteración del bucle para escribir (guardar) el contenido. | ||
| + | - Cerrar el archivo con close(). | ||
| + | |||
| + | <code python> | ||
| + | import requests | ||
| + | res = requests.get(' | ||
| + | res.raise_for_status() | ||
| + | playFile = open(' | ||
| + | for chunk in res.iter_content(100000): | ||
| + | playFile.write(chunk) | ||
| + | </ | ||
| ===== Módulo bs4 ===== | ===== Módulo bs4 ===== | ||
| + | El módulo //Beautiful Soup version 4// tampoco forma parte de python, y puede instalarse con: | ||
| + | <code python> | ||
| + | pip install --user beautifulsoup4 | ||
| + | |||
| + | import bs4 | ||
| + | </ | ||
| + | |||
| + | El módulo **bs4** sirve para parsear código HTML. \\ | ||
| + | **Parsear**: | ||
| + | |||
| + | De este modo, la idea es poder identificar los elementos HTML que nos interese y recuperarlos para extraer información. \\ | ||
| + | |||
| + | Para poder trabajar de este modo, necesitamos convertir la información del HTML en un objeto tipo // | ||
| + | El método **bs4.BeautifulSoup()** necesita un string con el texto del HTML que será parseado, el cual es posible obtenerlo con la función requests.get() que vimos anteriormente, | ||
| + | <code python> | ||
| + | import requests, bs4 | ||
| + | res = requests.get(' | ||
| + | res.raise_for_status() | ||
| + | noStarchSoup = bs4.BeautifulSoup(res.text, | ||
| + | type(noStarchSoup) | ||
| + | </ | ||
| + | |||
| + | También es posible pasar un documento HTML que se encuentre en local con la función open() | ||
| + | <code python> | ||
| + | exampleFile = open(' | ||
| + | exampleSoup = bs4.BeautifulSoup(exampleFile, | ||
| + | type(exampleSoup) | ||
| + | </ | ||
| + | |||
| + | También puede usarse el parseador ' | ||
| + | |||
| + | ==== Encontrar elementos ==== | ||
| + | Para identificar los elementos que interesen en el HTML, usaremos los selectores CSS. \\ | ||
| + | Para obtener estos elementos usaremos el método **.select()**\\ | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | Se pueden utilizar varios patrones de selectores para realizar búsquedas más sofisticadas, | ||
| + | |||
| + | El método **.select** devuelve una lista de objetos tipo //tag//, que es como BeautifulSoup representa los elementos HTML. Pueden ser pasados a string sin problemas con la función str(). \\ | ||
| + | |||
| + | Los elementos tipo " | ||
| + | |||
| + | También es posible obtener el texto que se encuentra asociado a un elemento HTML (el que aparece en la web) a través del método **.getText()**. | ||
| + | |||
| + | Suponemos el siguiente código HTML | ||
| + | <code html> | ||
| + | <!-- This is the example.html example file. --> | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | inventwithpython.com"> | ||
| + | <p class=" | ||
| + | <p>By <span id=" | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | Podemos buscar elementos del siguiente modo, directamente en la terminal de python: | ||
| + | <code python> | ||
| + | >>> | ||
| + | >>> | ||
| + | >>> | ||
| + | >>> | ||
| + | >>> | ||
| + | <class ' | ||
| + | >>> | ||
| + | 1 | ||
| + | >>> | ||
| + | <class ' | ||
| + | >>> | ||
| + | '< | ||
| + | >>> | ||
| + | 'Al Sweigart' | ||
| + | >>> | ||
| + | {' | ||
| + | >>> | ||
| + | >>> | ||
| + | '< | ||
| + | inventwithpython.com"> | ||
| + | >>> | ||
| + | ' | ||
| + | >>> | ||
| + | '<p class=" | ||
| + | >>> | ||
| + | 'Learn Python the easy way!' | ||
| + | >>> | ||
| + | '< | ||
| + | >>> | ||
| + | 'By Al Sweigart' | ||
| + | </ | ||
| + | ==== Obtener datos de atributos de elementos ==== | ||
| + | Para obtener fácilmente los valores de los atributos de un elemento (objeto tipo tag), podemos usar el método **get()**. Se le pasa el string del nombre de un atributo, y devuelve su valor. Vemos un ejemplo en la consola de Python: | ||
| + | <code python> | ||
| + | >>> | ||
| + | >>> | ||
| + | >>> | ||
| + | >>> | ||
| + | '< | ||
| + | >>> | ||
| + | ' | ||
| + | >>> | ||
| + | True | ||
| + | >>> | ||
| + | {' | ||
| + | </ | ||
| ===== Módulo selenium ===== | ===== Módulo selenium ===== | ||
python/webscraping.1707140383.txt.gz · Última modificación: por alberto
