# -*- coding: utf-8 -*-
"""
Created on Thu Aug 17 16:50:32 2023
@author: juanc
"""
import requests
from urllib import request
from bs4 import BeautifulSoup
import pandas as pd
# URL de la página web
url = '<https://hackerspace.govhack.org/data_sets>'
# Realizar la solicitud HTTP
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
# Encontrar la tabla por su clase o ID
table = soup.find('table', {'class': 'projects-table'})
header_row = table.find('thead').find('tr')
headers = [header.text.strip() for header in header_row.find_all('th')]
headers.append('url1')
headers.append('url2')
# Inicializar listas para almacenar los datos
data = []
# Extraer filas de la tabla
for row in table.find_all('tr'):
cols = row.find_all('td')
href=row.find_all('a')
href = [a.get('href') for a in href]
href=['<https://hackerspace.govhack.org>'+a for a in href]
cols = [col.text.strip() for col in cols]
cols=cols+href
data.append(cols)
# Convertir los datos en un DataFrame de pandas
df = pd.DataFrame(data, columns=[headers])
df['Project'] = None
for index, row in df.iterrows():
try:
if row['url2']is not None:
url = row['url2']
# Realizar una solicitud HTTP
response = request.urlopen(url)
# Obtener la URL de respuesta
url_obtenida = response.geturl()
df.at[index, 'url2'] = url_obtenida
except:
pass
try:
url = row['url1']
# Realizar la solicitud HTTP
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
# Encontrar la tabla por su clase o ID
descripcion = soup.find('strong',string=('Description:')).find_parent('p').get_text(strip=True).replace('Description:', '').strip()
df.at[index, 'Description'] = descripcion
project=soup.find('h2').get_text(strip=True)
df.at[index, 'Project'] = project
except:
pass
df=df.dropna()
# Guardar el DataFrame en un archivo Excel
df.to_excel('datos_extraidos.xlsx', index=False)
df.to_csv('datos_extraidos.csv', sep='|', index=False)