Restructure content and add notes from HolaMundo

Signed-off-by: Manuel Vergara <manuel@vergaracarmona.es>
This commit is contained in:
2023-05-20 09:36:26 +02:00
parent 64ed03f811
commit f4e9797c4b
430 changed files with 889 additions and 24 deletions

View File

@@ -0,0 +1,69 @@
"""
Web scraping básico
Con las librerias beautifulsoup4, lxml y requests
"""
import bs4
import requests
resultado = requests.get(
'https://escueladirecta-blog.blogspot.com/2021/10/encapsulamiento-pilares-de-la.html')
# el tipo nos muestra que es de tipo Response
print(type(resultado))
print()
# Si intentamos imprimir el texto nos mostrará todo el contenido html, css ...
# print(resultado.text)
# Para poder extraer datos necesitamos un parser (analizador sintáctico)
# como beautiful soup
# Necesitaremos el texto y el tipo de motor de parsing
sopa = bs4.BeautifulSoup(resultado.text, 'lxml')
# Con lo cual, ahora en la variable ya no es un string
# y este modo de texto de tipo bs4
# permite navegar mejor por él
print(type(sopa))
print()
# Podemos escoger las etiquetas, por ejemplo title
print(sopa.select('title'))
print()
# Nos dará una lista, porque puede haber más de un elemento
# que podemos contar con len
print(f"Tiene {len(sopa.select('p'))} párrafos.")
print()
# Podemos seleccionar de la lista el índice del elemento
# que queremos y además pedir que nos devuelva tan solo
# el texto de dentro del elemento
print(sopa.select('p')[1].getText())
print()
# Vamos a buscar un párrafo en concreto
parrafo_especial = sopa.select('p')[3].getText()
print(parrafo_especial)
print()
# Ahora vamos a coger elementos de la columna lateral
# Todos los títulos
titulos_columna_lateral = sopa.select('.sidebar-container article .post-title')
for title in titulos_columna_lateral:
print(title.getText())
print()
# Mostrar un párrafo concreto
parrafos_columna_lateral = sopa.select(
'.sidebar-container article .snippet-item')
print(parrafos_columna_lateral[0].getText())

View File

@@ -0,0 +1,37 @@
"""
Web scraping
Descargar imágenes
"""
import bs4
import requests
resultado = requests.get(
'https://www.escueladirecta.com/courses')
# Para poder extraer datos necesitamos
# un parser (analizador sintáctico)
# como beautiful soup
# Necesitaremos el texto y el tipo de motor de parsing
sopa = bs4.BeautifulSoup(resultado.text, 'lxml')
# Aislamos la url de la primera imagen
# que queremos descargar
imagen = sopa.select('.course-box-image')[0]['src']
print(imagen)
# Ahora cogemos el contenido del enlace
# (Tendrá un Response 200)
binario_imagen = requests.get(imagen)
# y mostramos el binario
# print(binario_imagen.content)
# Ahora preparamos un fichero para escribir
# wb significa "escribir binario"
# Abrimos el fichero, escribimos dentro y cerramos
f = open('mi_imagen.jpg', 'wb')
f.write(binario_imagen.content)
f.close()

View File

@@ -0,0 +1,21 @@
# Día 11 - Programa un extracto de datos web
## Índice
- [Día 11 - Programa un extracto de datos web](#día-11---programa-un-extracto-de-datos-web)
- [Índice](#índice)
- [11.1. - Extraer elementos de una clase](#111---extraer-elementos-de-una-clase)
- [Ficheros y documentación](#ficheros-y-documentación)
## 11.1. - Extraer elementos de una clase
## Ficheros y documentación
- [01_web_scraping_01.py](01_web_scraping_01.py)
- [02_web_scraping_02.py](02_web_scraping_02.py)
- [mi_imagen.jpg](mi_imagen.jpg)
- [programa_web_scraping.py](programa_web_scraping.py)
[Documentación del día](../doc_curso/11_web_scraping/)
---
Enlaces a todos los días: [dia 1 - creador de nombres](../dia_01/README.md) / [dia 2 - calculador de comisiones](../dia_02/README.md) / [dia 3 - analizador de texto](../dia_03/README.md) / [dia 4 - juego "adivina el número"](../dia_04/README.md) / [dia 5 - juego "El ahorcado"](../dia_05/README.md) / [dia 6 - recetario](../dia_06/README.md) / [dia 7 - cuenta bancaria](../dia_07/README.md) / [dia 8 - consola de turnos](../dia_08/README.md) / [dia 9 - buscador de números de serie](../dia_09/README.md) / [dia 10 - juego "Invasión espacial"](../dia_10/README.md) / [dia 11 - web scraping](../dia_11/README.md) / [dia 12 - gestor de restaurantes](../dia_12/README.md) / [dia 13 - asistente de voz](../dia_13/README.md) / [dia 14 - controlador de asistencia](../dia_14/README.md) / [dia 15 - machine learning](../dia_15/README.md) / [dia 16 - aplicación web de tareas pendientes](../dia_16/README.md)

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

3
python-total/dia_11/nul Normal file
View File

@@ -0,0 +1,3 @@
200

View File

@@ -0,0 +1,51 @@
"""
Programa dia 11 - Web scraping
nivel intermedio
Con las librerias beautifulsoup4, lxml y requests
"""
import bs4
import requests
# Variables
URL_BASE = 'http://books.toscrape.com/catalogue/page-{}.html'
FIN_URL = True
PAGE = 0
lista_titulos = []
print(f'\nLIBROS CON 4 O 5 ESTRELLAS\n')
# Bucle para formar url y añadir a una lista
while FIN_URL:
PAGE += 1
ENLACE = URL_BASE.format(PAGE)
resultado = requests.get(ENLACE)
sopa = bs4.BeautifulSoup(resultado.text, 'lxml')
# Si existe la url
if resultado:
# Todos los títulos
libros = sopa.select('.product_pod')
# Mostramos la página y el enlace
print(f'\nNÚMERO DE PÁGINA: {PAGE}\nENLACE: {ENLACE}\nLIBROS:')
# Seleccionamos uno a uno cada libro
for libro in libros:
# Seleccionamos los libros que tengan 4 o 5 estrellas
if libro.select('.star-rating.Four') or libro.select('.star-rating.Five'):
# Seleccionamos el texto del title del elemento
titulo_libro = libro.select('a')[1]['title']
# Mostramos el libro
print(f'\t- \"{titulo_libro}\"')
# Si no existe la url
else:
print("")
FIN_URL = False