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:52] – [Chequeo de errores] alberto | python:webscraping [2024/02/05 19:00] (actual) – [Encontrar elementos] alberto | ||
|---|---|---|---|
| Línea 80: | Línea 80: | ||
| ===== 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.1707141138.txt.gz · Última modificación: por alberto
