Python爬虫下载PDF文件

在 Python 中下载 PDF 文件可以通过多种方式实现,最常用的是使用 requests 库发送 HTTP 请求获取文件内容,再写入本地文件。以下是详细的实现方法:

文章目录

  • [方法一:使用 `requests` 库(推荐)](#方法一:使用 requests 库(推荐))
  • [方法二:使用 `urllib`(Python 标准库,无需额外安装)](#方法二:使用 urllib(Python 标准库,无需额外安装))
  • 关键说明
  • 常见问题

方法一:使用 requests 库(推荐)

requests 是处理 HTTP 请求的常用库,简洁高效,适合大多数场景。

  1. 安装 requests(若未安装):

    bash 复制代码
    pip install requests
  2. 代码示例:

    python 复制代码
    import 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)

关键说明

  1. URL 合法性 :确保目标 URL 直接指向 PDF 文件(通常以 .pdf 结尾),部分网站可能需要登录或处理反爬,此时需额外添加请求头(如 User-Agent)。

    示例(带请求头的 requests 用法):

    python 复制代码
    headers = {
        "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)
  2. 大文件处理

    • requests 中使用 stream=Trueiter_content(chunk_size) 分块下载,适合大文件,避免内存溢出。
    • urlliburlretrieve 内部也会分块处理,无需额外配置。
  3. 保存路径

    • 若指定路径(如 ./docs/file.pdf),需确保父目录存在(可通过 os.makedirs 提前创建)。

常见问题

  • 403 错误 :网站拒绝访问,需添加 User-Agent 模拟浏览器。
  • 404 错误:URL 无效,检查目标 PDF 地址是否正确。
  • 文件损坏:可能是下载中断或 URL 指向的并非 PDF 文件,可尝试重新下载并验证文件格式。

通过以上方法,即可稳定下载大多数公开可访问的 PDF 文件。

相关推荐
wayz112 分钟前
DuckDB 完全指南:从入门到精通
python·金融·量化交易
暮冬-  Gentle°4 分钟前
用Python批量处理Excel和CSV文件
jvm·数据库·python
m0_736914224 分钟前
服务器上pip install spacy卡住解决方法
开发语言·python
小陈工9 分钟前
2026年3月22日技术资讯洞察:数据库优化进入预测时代,网络安全威胁全面升级
java·开发语言·数据库·python·安全·web安全·django
j_xxx404_10 分钟前
爬虫对抗:ZLibrary反爬机制实战分析 (一) - 撕裂前端JS混淆与环境检测伪装
爬虫
m0_7301151121 分钟前
用户认证与授权:使用JWT保护你的API
jvm·数据库·python
kaisun6424 分钟前
树莓派4B上使用INMP441麦克风进行语音识别:从I2S配置到Python环境搭建全记录
python·语音识别·树莓派
七夜zippoe31 分钟前
Python 3.12+ 新特性深度解析:类型系统与性能革命
android·网络·python·类型系统·性能革命·3.12+
如若12335 分钟前
WSL2 启动报错“拒绝访问“ E_ACCESSDENIED 完整解决方案
人工智能·pytorch·python·深度学习·计算机视觉
qq_3349031541 分钟前
用Python实现自动化的Web测试(Selenium)
jvm·数据库·python