Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

234
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!