在 Python 中下载 PDF 文件可以通过多种方式实现,最常用的是使用 requests 库发送 HTTP 请求获取文件内容,再写入本地文件。以下是详细的实现方法:
文章目录
- [方法一:使用 `requests` 库(推荐)](#方法一:使用
requests库(推荐)) - [方法二:使用 `urllib`(Python 标准库,无需额外安装)](#方法二:使用
urllib(Python 标准库,无需额外安装)) - 关键说明
- 常见问题
方法一:使用 requests 库(推荐)
requests 是处理 HTTP 请求的常用库,简洁高效,适合大多数场景。
-
安装
requests(若未安装):bashpip install requests -
代码示例:
pythonimport requests def download_pdf(url, save_path): try: # 发送 GET 请求,stream=True 表示流式下载(适合大文件) response = requests.get(url, stream=True, timeout=10) # 检查请求是否成功(状态码 200) response.raise_for_status() # 写入本地文件 with open(save_path, 'wb') as f: # 分块写入,避免占用过多内存 for chunk in response.iter_content(chunk_size=1024): if chunk: # 过滤空块 f.write(chunk) print(f"PDF 文件已成功下载至:{save_path}") except requests.exceptions.RequestException as e: print(f"下载失败:{e}") # 示例:下载一个公开的 PDF 文件 pdf_url = "https://example.com/sample.pdf" # 替换为目标 PDF 的 URL save_location = "downloaded_file.pdf" # 保存路径(可自定义) download_pdf(pdf_url, save_location)
方法二:使用 urllib(Python 标准库,无需额外安装)
如果不想依赖第三方库,可以使用 Python 内置的 urllib 模块。
python
from urllib.request import urlretrieve
from urllib.error import URLError, HTTPError
def download_pdf_urllib(url, save_path):
try:
# 直接下载并保存文件
urlretrieve(url, save_path)
print(f"PDF 文件已成功下载至:{save_path}")
except (URLError, HTTPError) as e:
print(f"下载失败:{e}")
# 示例
pdf_url = "https://example.com/sample.pdf"
save_location = "urllib_download.pdf"
download_pdf_urllib(pdf_url, save_location)
关键说明
-
URL 合法性 :确保目标 URL 直接指向 PDF 文件(通常以
.pdf结尾),部分网站可能需要登录或处理反爬,此时需额外添加请求头(如User-Agent)。示例(带请求头的
requests用法):pythonheaders = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" } response = requests.get(url, headers=headers, stream=True) -
大文件处理:
requests中使用stream=True和iter_content(chunk_size)分块下载,适合大文件,避免内存溢出。urllib的urlretrieve内部也会分块处理,无需额外配置。
-
保存路径:
- 若指定路径(如
./docs/file.pdf),需确保父目录存在(可通过os.makedirs提前创建)。
- 若指定路径(如
常见问题
- 403 错误 :网站拒绝访问,需添加
User-Agent模拟浏览器。 - 404 错误:URL 无效,检查目标 PDF 地址是否正确。
- 文件损坏:可能是下载中断或 URL 指向的并非 PDF 文件,可尝试重新下载并验证文件格式。
通过以上方法,即可稳定下载大多数公开可访问的 PDF 文件。