Requests 无法获取 pdf URL 并下载它

Requests is unable to get a pdf URL and download it

在我的工作中,我们得到了很多需要下载的产品 pdf。这会导致长长的 url 列表,我不想一遍又一遍地点击它们。对于某些人,我可以使用下面的代码下载 pdf,但对于其他人(比如包含的那个),当我要求它获取 url.

我已经尝试了在其他地方看到的不同参数和不同提示,但没有任何效果。我是代码和 python 的新手,所以我可能在这里遗漏了一些明显的东西。任何帮助和解释将不胜感激。谢谢!

import requests # to get image from the web
import shutil # to save it locally

url = "https://www.us.kohler.com/webassets/kpna/catalog/pdf/en/K-10411_spec_US-CA_Kohler_en.pdf"
filename = 'TEST-Image.pdf'

r = requests.get(url, stream = True)

if r.status_code == 200:

    r.raw.decode_content = True

with open(filename,'wb') as f:
    shutil.copyfileobj(r.raw, f)
    
    print('PDF sucessfully Downloaded: ',filename)
else:
    print('PDF Couldn\'t be retrieved')

这里的问题,至少对于提供的特定 link,是科勒方面的某些东西不理解 headers 中没有设置 user-agent 的请求。这要么是错误,要么是故意的。它实际上可能是为了阻止人们做你正在做的事情——大量下载他们的手册。无论如何,解决方案很简单。

将您的请求调用修改为如下所示:

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'}
r = requests.get(url, stream = True, headers = headers)

请注意,实际提供的 user-agent 字符串只是 Windows 10 上 Chrome 的标准字符串。您可以使用任何您想要的 user-agent 字符串。