Python 使用请求下载.pdf会导致文件损坏

Python 使用请求下载.pdf会导致文件损坏,python,beautifulsoup,python-requests,Python,Beautifulsoup,Python Requests,我有一个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: # I

我有一个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,因为它不是受支持的文件。” 文件类型或因为文件已损坏(…)”

  • 这是什么原因?是否因为您第一次访问此页面时被重定向,需要选择一些首选项
  • 我们如何解决这个问题

实际上,您还没有通过启动
下载所需的
参数,就好像您已经导航到了,您将看到需要单击
继续
才能开始下载。bacground中正在发生的事情是使用以下
参数
获取到后端的
请求
?switchLocale=y&siteEntryPassthrough=true
以启动
下载

您可以在浏览器中的
developer tools
下查看,并导航到
网络选项卡
部分

导入请求
参数={
“switchLocale”:“y”,
“siteEntryPassthrough”:“true”
}
def main(url,参数):
r=requests.get(url,params=params)
以open(“test.pdf”,“wb”)作为f:
f、 写作(r.content)
主要(”https://www.blackrock.com/uk/individual/literature/annual-report/blackrock-index-selection-fund-en-gb-annual-report-2019.pdf“,参数)

实际上,您还没有传递启动
下载所需的
参数,就好像您已经导航到了,您将看到需要单击
继续
才能开始下载。bacground中正在发生的事情是使用以下
参数
获取到后端的
请求
?switchLocale=y&siteEntryPassthrough=true
以启动
下载

您可以在浏览器中的
developer tools
下查看,并导航到
网络选项卡
部分

导入请求
参数={
“switchLocale”:“y”,
“siteEntryPassthrough”:“true”
}
def main(url,参数):
r=requests.get(url,params=params)
以open(“test.pdf”,“wb”)作为f:
f、 写作(r.content)
主要(”https://www.blackrock.com/uk/individual/literature/annual-report/blackrock-index-selection-fund-en-gb-annual-report-2019.pdf“,参数)

好的,那么你需要事先知道这些类型的参数吗?@JohnAndrews。这是服务器端预定义的参数。除非您实施
机器学习
模型来处理所有情况,例如遵循
单击按钮
或查找
下载
单词的
框架
。漫长的讨论:p我们希望有一天能进行这样的讨论:)@JohnAndrews将是你完成这项任务的最好朋友,这是一个很好的参考。但是,如何定义pdf是否已正确下载?这将是一个很好的模型输入,能够知道它是否失败或成功。好的,那么你需要事先知道这些类型的参数吗?@JohnAndrews。这是服务器端预定义的参数。除非您实施
机器学习
模型来处理所有情况,例如遵循
单击按钮
或查找
下载
单词的
框架
。漫长的讨论:p我们希望有一天能进行这样的讨论:)@JohnAndrews将是你完成这项任务的最好朋友,这是一个很好的参考。但是,如何定义pdf是否已正确下载?这将是一个很好的模型输入,能够知道它是否失败或成功。