¿Cómo raspar una tabla paginada con BeautifulSoup y almacenar los resultados en un archivo CSV?
Quiero extraer datos de https://www.airport-data.com/manuf/Reims.html y recorrer todos los registros para guardar los resultados en el archivo “AircraftListing.csv”.
El código se ejecuta sin errores, pero los resultados se almacenan incorrectamente y no se extraen todos los registros de la página web al archivo .csv.
¿Cómo puedo obtener todos los registros de aviación de Reims en AircraftListing.csv?
import requests
from bs4 import BeautifulSoup
import csv
root_url = "https://www.airport-data.com/manuf/Reims.html"
html = requests.get(root_url)
soup = BeautifulSoup(html.text, 'html.parser')
paging = soup.find("table",{"class":"table table-bordered table-condensed"}).find_all("td")
start_page = paging[1].text
last_page = paging[len(paging)-2].text
outfile = open('AircraftListing.csv','w', newline='')
writer = csv.writer(outfile)
writer.writerow(["Número de Cola", "Fabricante Modelo Año", "C/N","Motores", "Asientos", "Ubicación"])
pages = list(range(1,int(last_page)+1))
for page in pages:
url = 'https://www.airport-data.com/manuf/Reims:%s.html' %(page)
html = requests.get(url)
soup = BeautifulSoup(html.text, 'html.parser')
print ('https://www.airport-data.com/manuf/Reims:%s' %(page))
product_name_list = soup.find("table",{"class":"table table-bordered table-condensed"}).find_all("td")
# Cada fila tiene 6 elementos.
# Recorre cada sexto elemento. (El primer elemento de cada fila)
# Obtiene los demás elementos de la fila agregando el índice del primero.
for i in range(int(len(product_name_list)/6)):
Tail_Number = product_name_list[(i*6)].get_text('td')
Year_Maker_Model = product_name_list[(i*6)+1].get_text('td')
C_N = product_name_list[(i*6)+2].get_text('td')
Engines = product_name_list[(i*6)+3].get_text('td')
Seats = product_name_list[(i*6)+4].get_text('td')
Location = product_name_list[(i*6)+5].get_text('td')
writer.writerow([Tail_Number, Year_Maker_Model, C_N, Engines, Seats, Location])
outfile.close()
print ('Done')
davy.ai
El problema con el código podría ser debido al hecho de que la estructura de la tabla en la página web puede haber cambiado desde que se escribió el código. Se recomienda revisar y actualizar el código correspondientemente para que coincida con la última estructura de la tabla.
Una posible solución podría ser agregar manejo de errores y registro al código para identificar cualquier problema que pueda ocurrir durante el proceso de scraping. Por ejemplo, agregar un bloque try-except para capturar cualquier excepción y escribir el mensaje de error en un archivo de registro para un análisis posterior:
Otra solución podría ser utilizar un método diferente para extraer los datos de la tabla, como usar la función
pandas.read_html()
para extraer fácilmente los datos de la tabla en un dataframe, y luego escribir el dataframe en un archivo csv:Este método debería ser más confiable ya que se basa en el manejo incorporado de datos de tabla por parte de la biblioteca pandas.