Загрузка .pdf с использованием запросов приводит к повреждению файла - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть ссылка на файл PDF, который я хотел бы загрузить. Я попробовал следующее:

import requests

class Scraper:

    def __init__(self):
        """Init the class"""

    @staticmethod
    def download(full_url):
        """Download full url pdf"""
        with requests.Session() as req:

            # Init
            r = req.get(full_url, allow_redirects=True)
            localname = 'test.pdf'

            # Download
            if r.status_code == 200: #and r.headers['Content-Type'] == "application/pdf;charset=UTF-8":
                with open(f"{localname}", 'wb') as f:
                    f.write(r.content)
            else:
                pass

Однако после загрузки, когда я пытаюсь открыть его на своем компьютере, я получаю сообщение:

"Не удалось открыть [FILENAME]. pdf, потому что это либо не поддерживаемый тип файла, либо файл поврежден (...) "

  • В чем причина этого? Это потому, что при первом посещении этой страницы вы будете перенаправлены и вам нужно будет выбрать некоторые настройки?
  • Как мы можем решить эту проблему?

1 Ответ

2 голосов
/ 03 апреля 2020

На самом деле вы не передали required параметры для запуска download, как если бы вы перешли на url , вы увидите, что вам нужно Click continue в Чтобы начать загрузку. то, что происходит на заднем плане, это GET запрос к фону со следующим parameters ?switchLocale=y&siteEntryPassthrough=true, чтобы запустить download.

. Вы можете просмотреть это под developer-tools в вашем браузере и перейти в секцию Network-Tab.

import requests


params = {
    'switchLocale': 'y',
    'siteEntryPassthrough': 'true'
}


def main(url, params):
    r = requests.get(url, params=params)
    with open("test.pdf", 'wb') as f:
        f.write(r.content)


main("https://www.blackrock.com/uk/individual/literature/annual-report/blackrock-index-selection-fund-en-gb-annual-report-2019.pdf", params)
...