1

我正在尝试通过 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 保存它。我几乎到处搜索都无济于事。非常感谢!

4

1 回答 1

-1

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

这是要提交的表格:

<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 查询。

于 2013-09-28T05:20:32.347 回答