使用Python requests下载指定PDF时遇403错误或文件损坏的解决方法
解决思路:requests下载Cell期刊PDF返回403/文件损坏的问题
添加请求头模拟浏览器访问
网站会检测请求的User-Agent,直接用requests.get默认的UA会被拦截。需要添加浏览器的UA信息,示例代码:import requests def download_pdf(url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' } response = requests.get(url, headers=headers) # 先检查响应状态码 if response.status_code == 200: with open('sample.pdf', 'wb') as f: f.write(response.content) print("下载成功") else: print(f"请求失败,状态码:{response.status_code}") if __name__ == "__main__": url = "https://www.cell.com/heliyon/pdf/S2405-8440(18)33206-7.pdf" download_pdf(url)处理可能的Cookie验证
部分期刊网站需要Cookie验证(比如会话信息),可以从浏览器中复制当前会话的Cookie添加到请求头:headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36', 'Cookie': '这里粘贴浏览器中复制的Cookie内容' }检查重定向
有些PDF链接会先重定向到真实资源,确保requests自动处理重定向(默认是开启的,但可以显式设置allow_redirects=True)。验证响应内容
如果下载后文件损坏,可打印response.text查看是否是HTML错误页面,而非PDF内容。
内容的提问来源于stack exchange,提问作者jonahbardos
相关产品推荐
相关产品推荐

