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 文件。

相关推荐
XLYcmy5 小时前
京东 算法实习一面 下+手撕
c++·python·llm·概率论·数据处理·训练·codebert
虎头金猫5 小时前
如何在群晖NAS上通过Docker部署CloudSaver?群晖部署CloudSaver教程|聚合资源搜索并实现远程访问
运维·服务器·网络·python·docker·容器·pandas
从零开始学习人工智能5 小时前
WSL2部署CUDA12+cuDNN9踩坑实录:ONNX Runtime GPU推理环境搭建全流程
python
m0_380743876 小时前
从零调用 Claude 教程
开发语言·python·node.js
min(a,b)7 小时前
学习第17天:Agent Memory 与 MCP 协议
python·学习
CodeBlog-star8 小时前
LLM安全实战:提示词注入与越狱攻击防御指南
python·agent·提示词攻击·越狱攻击
小柯南敲键盘8 小时前
电商图片翻译工具推荐,批量处理主图视频字幕,免费试用
大数据·人工智能·python·音视频
比高创意品牌策划设计9 小时前
零售卖场设计软件用CAD还是SketchUp还是酷家乐
python
赵广陆10 小时前
企业实战:主体识别
langchain·pdf·langgraph
迷迭香yy10 小时前
行业板块轮动因子实战从板块资金到因子建模的本地化Python全流程
数据库·人工智能·python