Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

230
Vistas
Python: descargue la lista de CSV dentro del script javascript en la web

Quiero descargar una lista de csv con un script de python.

http://meteo.navarra.es/estaciones/descargardatos_estacion.cfm?IDEstacion=251

He usado este código para localizar las URL del archivo.

 import urllib.request as urllib2 from bs4 import BeautifulSoup # Fetch URL url = 'http://meteo.navarra.es/estaciones/descargardatos_estacion.cfm? IDEstacion=251' request = urllib2.Request(url) request.add_header('Accept-Encoding', 'utf-8') # Response has UTF-8 charset header, # and HTML body which is UTF-8 encoded response = urllib2.urlopen(request) # Parse with BeautifulSoup soup = BeautifulSoup(response,"html.parser") print(soup)

Esas URL de CSV están dentro de un script de javascripts

 <script type="text/javascript"> <!-- var d = new dTree('d'); d.add(0,-1,'<b>Ficheros de datos</b>'); d.add(1,0,'AncÃn INTIA','','','','/js/dtree/img/folder.gif'); d.add(10,1,'Datos diarios','','','','/js/dtree/img/folder.gif'); d.add(1000,10,'AncÃn INTIA_2001.csv','/_data/datos_estaciones/estacion_251/datos diarios/ancÃn intia_2001.csv'); d.add(1001,10,'AncÃn INTIA_2002.csv','/_data/datos_estaciones/estacion_251/datos diarios/ancÃn intia_2002.csv'); d.add(1002,10,'AncÃn INTIA_2003.csv','/_data/datos_estaciones/estacion_251/datos diarios/ancÃn intia_2003.csv'); d.add(1003,10,'AncÃn INTIA_2004.csv','/_data/datos_estaciones/estacion_251/datos diarios/ancÃn intia_2004.csv'); -->

Intenté usar request y sopa para encontrar el dTree, pero no puedo acceder a los atributos del árbol.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

beautifulsoup solo devolverá el contenido de un elemento de secuencia de comandos como texto, deberá extraer las entradas usted mismo desde adentro. Esto podría hacerse usando una expresión regular para extraer las líneas .add . Cada línea de texto podría convertirse en una lista de Python usando literal_eval y luego podría tomar el último elemento.

Por ejemplo:

 import urllib.request as urllib2 from bs4 import BeautifulSoup import re from ast import literal_eval # Fetch URL url = 'http://meteo.navarra.es/estaciones/descargardatos_estacion.cfm?IDEstacion=251' request = urllib2.Request(url) request.add_header('Accept-Encoding', 'utf-8') # Response has UTF-8 charset header, and HTML body which is UTF-8 encoded response = urllib2.urlopen(request) # Parse with BeautifulSoup soup = BeautifulSoup(response,"html.parser") re_add = re.compile("add\((.*?\.csv')\);") csv_files = [] for script in soup.find_all('script', type="text/javascript"): if script.string and '.csv' in script.string: for entry in re_add.findall(script.string): csv_files.append(literal_eval(f'[{entry}]')[-1]) print('\n'.join(csv_files))

Dándote entradas:

 /_data/datos_estaciones/estacion_251/datos diarios/ancÃn intia_2001.csv /_data/datos_estaciones/estacion_251/datos diarios/ancÃn intia_2002.csv /_data/datos_estaciones/estacion_251/datos diarios/ancÃn intia_2003.csv /_data/datos_estaciones/estacion_251/datos diarios/ancÃn intia_2004.csv /_data/datos_estaciones/estacion_251/datos diarios/ancÃn intia_2005.csv /_data/datos_estaciones/estacion_251/datos diarios/ancÃn intia_2006.csv /_data/datos_estaciones/estacion_251/datos diarios/ancÃn intia_2007.csv /_data/datos_estaciones/estacion_251/datos diarios/ancÃn intia_2008.csv /_data/datos_estaciones/estacion_251/datos diarios/ancÃn intia_2009.csv /_data/datos_estaciones/estacion_251/datos diarios/ancÃn intia_2010.csv /_data/datos_estaciones/estacion_251/datos diarios/ancÃn intia_2011.csv /_data/datos_estaciones/estacion_251/datos diarios/ancÃn intia_2012.csv /_data/datos_estaciones/estacion_251/datos diarios/ancÃn intia_2013.csv /_data/datos_estaciones/estacion_251/datos diarios/ancÃn intia_2014.csv /_data/datos_estaciones/estacion_251/datos diarios/ancÃn intia_2015.csv /_data/datos_estaciones/estacion_251/datos diarios/ancÃn intia_2016.csv /_data/datos_estaciones/estacion_251/datos diarios/ancÃn intia_2017.csv /_data/datos_estaciones/estacion_251/datos diarios/ancÃn intia_2018.csv /_data/datos_estaciones/estacion_251/datos diarios/ancÃn intia_2019.csv /_data/datos_estaciones/estacion_251/datos diarios/ancÃn intia_2020.csv
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda