python下载xls javascript

时间:2013-09-28 05:08:14

标签: python web-scraping

我正在尝试通过POST请求从这样的页面下载.xls文件,我尝试使用urllib2,请求等,但我认为该文件是通过javascript函数访问的。

我的代码是:

import urllib2

url= 'http://www.inegi.org.mx/est/contenidos/espanol/proyectos/censos/ce2009/saic/exportar.asp?Cuadro=INEGI.+Censos+Econ%C3%B3micos+2009.+Resultados+definitivos&Censo=2009&Nacional=&vcampo=H001A&Sector=23&c=17166&Genera=1&formato=Hoja+de+C%C3%A1lculo+Excel%28.xls%29&Modelo=SCIAN&Grupo=AA&Municipio=01001'
obj = urllib2.urlopen(url)
file = '/home/j/Dropbox/School/RA/download.xls'
output = open(file, 'wb')
output.write(obj.read())
output.close()

似乎没有给我我想要的东西。我知道在页面上使用firebug,javascript函数     document.exporta.submit() 生成.xls文件,但我不知道如何使用python保存它。我几乎到处都搜索无济于事。非常感谢!

1 个答案:

答案 0 :(得分:-1)

此网址会将您重定向到第二个页面,其中包含通过Javascript提交的表单。您需要分析第二个表单的内容并提取其参数,以便使用参数自动化下载。获取上面的URL对您没有帮助。 像“mechanize”这样的工具可以帮助您自动获取文件。

这是要提交的表格:

<form name="exporta" method="post" action="/lib/exporta/exporta.aspx" target="_self">

<input type="hidden" name="to_display" value="entidad,municipio,codigo,H001A ">
<input type="hidden" name="Lc_encabeza" value=" Entidad federativa\Municipios\Codigo\PERSONAL OCUPADO TOTAL\ ">
<input type="hidden" name="lc_formato" value="Hoja de Cálculo Excel(.xls)">

     <input type="hidden" name="lc_piepagina" value="Nota:  CONFIDENCIALIDAD DE LOS DATOS PROPORCIONADOS CON FINES ESTAD?STICOS LA COLUMNA UNIDADES ECON?MICAS SE ENCUENTRA INHIBIDA EN VARIOS RENGLONES, MOSTRANDO UN ASTERISCO (*). ESTO SE DEBE A QUE LA LEY DEL SISTEMA NACIONAL DE INFORMACION ESTAD?STICA Y GEOGR?FICA, EN VIGOR, EN SUS ART?CULOS 37, 38, 42 Y 47 ESTABLECE LA CONFIDENCIALIDAD DE LA INFORMACI?N. EL ART?CULO 37 SE?ALA QUE: ''LOS DATOS QUE PROPORCIONEN PARA FINES ESTAD?STICOS LOS INFORMANTES DEL SISTEMA A LAS UNIDADES EN T?RMINOS DE LA PRESENTE LEY, SER?N ESTRICTAMENTE CONFIDENCIALES Y BAJO NINGUNA CIRCUNSTANCIA PODR?N UTILIZARSE PARA OTRO FIN QUE NO SEA EL ESTAD?STICO..''; MIENTRAS QUE EL ART?CULO 38 CITA TEXTUALMENTE: '' LOS DATOS E INFORMES QUE LOS INFORMANTES DEL SISTEMA PROPORCIONEN PARA FINES ESTAD?STICOS Y QUE PROVENGAN DE REGISTROS ADMINISTRATIVOS, SER?N  MANEJADOS OBSERVANDO LOS PRINCIPIOS DE CONFIDENCIALIDAD Y RESERVA, POR LO QUE NO PODR?N DIVULGARSE EN NING?N CASO EN FORMA NOMINATIVA O INDIVIDUALIZADA, NI HAR?N PRUEBA ANTE AUTORIDAD JUDICAL O ADMINISTRATIVA, INCLUYENDO LA FISCAL, EN JUICIO O FUERA DE ?L..''. EL ART?CULO 42 HACE REFERENCIA A LA POSIBILIDAD DE DENUNCIAR LA VIOLACI?N A LOS YA MENCIONADOS PRINCIPIOS DE CONFIDENCIALIDAD Y RESERVA; MIENTRAS QUE EL ART?CULO 47 DICTA QUE: '' LA INFORMACI?N NO QUEDA SUJETA A LA LEY FEDERAL DE TRANSPARENCIA Y ACCESO A LA INFORMACI?N P?BLICA GUBERNAMENTAL..''.\Fuente: INEGI - Censos Econ&oacute;micos 2009. Resultados definitivos\">
     <input type="hidden" name="lc_piecuadro" value="Fuente: INEGI. Censos Econ&oacute;micos 2009. Resultados definitivos" >

<input type="hidden" name="Lc_sql" value="Select a.entidad + ' ' + b.descrip as entidad,a.municipio + ' ' + c.descrip as municipio,a.codigo + ' ' + d.descrip as codigo, H001A  from (Select entidad,municipio,codigo,clave,H001A  from saic.saic_2009_23 where ((entidad=01 ) AND (municipio=001  ) AND (codigo=23))  AND (substring(clave,1,2)= 'NG' OR len(clave)=0)  ) a, saic.entidad_2009 b, saic.municipios_2009 c , saic.renrp d where a.entidad = b.codigo  and (a.entidad =substring(c.codigo,1,2) and  a.municipio = substring(c.codigo,3,3))  and (a.codigo = d.codigo and d.clasif = 'B')  order by  a.entidad, a.municipio,a.codigo" >
<input type="hidden" name="Lc_conexion" value="Provider=sqloledb;Data Source=INTERNET\BD02;Initial catalog=SAIC;User id=internet.consulta;Pwd=ProdBD8;" >
<input type="hidden" name="lc_titulo" value="INEGI. CENSOS ECONóMICOS 2009. RESULTADOS DEFINITIVOS" >


</form>

哦,太好了,它包含SQL查询。