Las solicitudes de Python no funcionan para descargar un archivo pdf a través de la URL

Resuelto Lewis asked hace 7 meses • 0 respuestas

Normalmente uso la biblioteca de solicitudes para descargar archivos PDF que tienen una URL específica; pero esta vez no funciona y creo que puede estar relacionado con el sitio web. Descubrí en la web que agregar encabezados puede funcionar en algunos casos, pero después de intentar con varios de ellos, el resultado es el mismo: el archivo se descarga pero no se puede abrir porque parece estar dañado.

¿Tiene algún método alternativo que pueda funcionar para descargar correctamente el archivo pdf de este sitio? Aquí está el fragmento de mi último intento:

import requests

url = 'https://www.adgm.com/documents/operating-in-adgm/ongoing-obligation/enforcement/alpha-development-middle-east-ltd-penalty-notice-redacted.pdf?la=en&hash=5EA2DA7D1492D105375580EEF2FB088F'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36'}
response = requests.get(url, stream = True, headers = headers)

with open('sample.pdf', 'wb') as f:
    f.write(response.content)

Gracias,

Cualquier propuesta alternativa que permita la correcta descarga del archivo pdf será muy apreciada.

Lewis avatar Feb 16 '24 15:02 Lewis
Aceptado

Ese sitio en particular requiere los encabezados Accept-Language y User-Agent. Para descargar ese documento puedes hacer esto:

import requests

PDF = "alpha-development-middle-east-ltd-penalty-notice-redacted.pdf"

URL = f"https://www.adgm.com/documents/operating-in-adgm/ongoing-obligation/enforcement/{PDF}"

PARAMS = {
    "la": "en",
    "hash": "5EA2DA7D1492D105375580EEF2FB088F"
}

HEADERS = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_3_1) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Safari/605.1.15",
    "Accept-Language": "en-GB,en;q=0.9,en-US;q=0.8,pt;q=0.7"
}

CHUNK = 32 * 1024

with requests.get(URL, headers=HEADERS, params=PARAMS, stream=True) as response:
    response.raise_for_status()
    with open(PDF, "wb") as output:
        for data in response.iter_content(CHUNK):
            output.write(data)
CtrlZ avatar Feb 16 '2024 09:02 CtrlZ