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

236
Vistas
Python: Download list of CSVs inside of javascript script in web

I want to download a list of csv with a python script.

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

I've used this code to locate the file urls

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)

Those CSVs urls are inside a javascripts script

<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');
                    
-->

I've tried to use request and soup to find the dTree but i cant get to access the tree attributes.

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

0

beautifulsoup will only return the contents of a script element as text, you will need to extract the entries yourself from inside. This could be done using a regular expression to extract the .add lines. Each text line could be converted into a Python list using literal_eval and then you could take the last element.

For example:

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))

Giving you entries:

/_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