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

相关推荐
小鸡吃米…1 小时前
机器学习中的代价函数
人工智能·python·机器学习
Li emily2 小时前
如何通过外汇API平台快速实现实时数据接入?
开发语言·python·api·fastapi·美股
m0_561359672 小时前
掌握Python魔法方法(Magic Methods)
jvm·数据库·python
Ulyanov2 小时前
顶层设计——单脉冲雷达仿真器的灵魂蓝图
python·算法·pyside·仿真系统·单脉冲
2401_838472513 小时前
使用Python进行图像识别:CNN卷积神经网络实战
jvm·数据库·python
CoLiuRs3 小时前
语义搜索系统原理与实现
redis·python·向量·es
zhihuaba4 小时前
使用PyTorch构建你的第一个神经网络
jvm·数据库·python
u0109272714 小时前
Python Web爬虫入门:使用Requests和BeautifulSoup
jvm·数据库·python
Stream_Silver4 小时前
【Agent学习笔记3:使用Python开发简单MCP服务】
笔记·python
穿过锁扣的风4 小时前
零基础入门 Python 爬虫:从基础到实战,爬取虎扑 / 豆瓣 / 图片全掌握
开发语言·爬虫·python