Estoy tratando de descargar algunos PDF automáticamente en un sitio (http://bibliotecadigitalhispanica.bne.es) usando Python.Ejecutando JavaScript en href de enlaces con Python
He intentado utilizar los módulos urllib/urllib2/mechanize (que he estado usando para otros sitios: esto incluye las funciones estándar como urlopen, urlretrieve, etc.), pero aquí, los enlaces tienen JavaScript incrustado en su atributos href que procesan y abren el PDF, que estos módulos parecen no poder manejar, al menos según lo que he leído aquí. Por ejemplo, cuando lo haga lo siguiente:
request = mechanize.Request('the example url below')
response = mechanize.urlopen(request)
que acaba de volver a la página HTML que contiene - Yo sólo parece que no puede extraer el archivo PDF (no hay enlaces a la misma dentro de esa página, tampoco).
Sé mirando los encabezados en un navegador real (usando la extensión LiveHTTPHeaders en Firefox) que se realizan muchas solicitudes HTTP y, finalmente, se devuelve el PDF (y se muestra en el navegador). Me gustaría poder interceptar esto y descargarlo. Concretamente, recibo una serie de 302 y 304 respuestas, que finalmente conducen al PDF.
Aquí hay un ejemplo de un atributo de enlace que estoy rastreando: href = 'javascript: open_window_delivery ("http://bibliotecadigitalhispanica.bne.es:80/verylonglinktoaccess");'
Parece que si ejecuto este JavaScript incrustado en el atributo href, eventualmente puedo llegar al documento PDF en sí. Lo he intentado con selenio, pero es un poco confuso; no estoy seguro de cómo usarlo al leer su documentación. ¿Alguien puede sugerir una forma (ya sea a través de un módulo que no he probado o por medio de uno que tengo) de que pueda hacer esto?
Muchas gracias por cualquier ayuda con esto.
PD: en caso de que le gustaría ver lo que estoy tratando de replicar, estoy tratando de acceder a los enlaces mencionados anteriormente PDF en la página siguiente (los que tienen los iconos PDF) :): http://bibliotecadigitalhispanica.bne.es/R/9424CFL1MDQGLGBB98QSV1HFAD2APYDME4GQKCBSLXFX154L4G-01075?func=collections-result&collection_id=1356
podría usar una expresión regular para extraer el uri? – max
He intentado hacer esto también, sacando el URI desde dentro de la llamada a la función de JavaScript y luego tratando de acceder a eso con mechanize y urllib2, pero hasta ahora no tuve suerte - me devolvió la página html que contiene: -/From viewing viewing los encabezados, parece que se realizan muchas solicitudes con este URI, incluidos algunos redireccionamientos. ¿Hay alguna forma de obtener todas estas respuestas? Tal vez eso también podría resolver el problema. Gracias por la respuesta, por cierto. – spanport
ACTUALIZACIÓN: terminé encontrando una forma de evitarlo en este sitio en particular al encontrar la estructura de las URL que estaban más cerca de los archivos PDF y luego redireccionar desde esos. ¡Aclamaciones! – spanport