You've already forked Curso-lenguaje-python
Add exercises 21 - Solved 3
Signed-off-by: Manuel Vergara <manuel@vergaracarmona.es>
This commit is contained in:
41
30-days-of-python/22_Web_scraping/03_web_scraping.py
Normal file
41
30-days-of-python/22_Web_scraping/03_web_scraping.py
Normal file
@@ -0,0 +1,41 @@
|
||||
import requests
|
||||
from bs4 import BeautifulSoup
|
||||
import json
|
||||
|
||||
url = 'https://en.wikipedia.org/wiki/List_of_presidents_of_the_United_States'
|
||||
response = requests.get(url)
|
||||
soup = BeautifulSoup(response.text, 'html.parser')
|
||||
|
||||
# Encuentra la tabla por su clase
|
||||
table = soup.find('table', {'class': 'wikitable'})
|
||||
|
||||
# Encuentra todas las filas en la tabla
|
||||
rows = table.find_all('tr')
|
||||
|
||||
# Extrae los encabezados de la primera fila
|
||||
headers = [header.get_text().strip()
|
||||
for header in rows[0].find_all(['th', 'td'])]
|
||||
|
||||
# Inicializa una lista para almacenar los datos
|
||||
data = []
|
||||
|
||||
# Itera a través de las filas a partir de la segunda (índice 1)
|
||||
for row in rows[1:]:
|
||||
# Encuentra todas las celdas en la fila
|
||||
cells = row.find_all(['th', 'td'])
|
||||
|
||||
# Verifica que haya celdas suficientes en la fila
|
||||
if cells and len(cells) >= len(headers):
|
||||
president = {}
|
||||
for i, header in enumerate(headers):
|
||||
# Asigna el valor de la celda al encabezado correspondiente
|
||||
cell_data = cells[i].find(string=True) if cells[i].find(
|
||||
string=True) else cells[i].find('a')['title'].strip()
|
||||
president[header.lower()] = cell_data
|
||||
data.append(president)
|
||||
|
||||
# Guarda los datos como JSON
|
||||
with open('us_presidents.json', 'w') as f:
|
||||
json.dump(data, f, indent=2)
|
||||
|
||||
print("Datos guardados en us_presidents.json")
|
||||
Reference in New Issue
Block a user