You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中转换URL编码字符串?附PDF批量下载代码解析

在Python中处理URL编码字符串及优化PDF下载代码

嘿,我来帮你搞定Python里的URL编码转换,顺便优化下你的PDF下载代码~

一、URL编码与解码的常用方法

Python自带的urllib.parse模块就能轻松处理URL编码/解码,给你几个实用场景:

  • 把普通字符串转成URL兼容格式:用quote()或者quote_plus()。后者会把空格替换成+,更符合URL的标准规范
    from urllib.parse import quote, quote_plus
    
    # 示例:包含中文的文件名
    original_name = "Python编程入门.pdf"
    # 基础编码
    encoded_name = quote(original_name)
    # 结果: Python%E7%BC%96%E7%A8%8B%E5%85%A5%E9%97%A8.pdf
    # 适合URL的编码(空格转+)
    encoded_name_plus = quote_plus(original_name)
    # 结果: Python%E7%BC%96%E7%A8%8B%E5%85%A5%E9%97%A8.pdf(如果有空格会变成+)
    
  • 把URL编码的字符串转回原始内容:用unquote()或者unquote_plus(),对应上面的编码方式
    from urllib.parse import unquote, unquote_plus
    
    encoded_name = "Python%E7%BC%96%E7%A8%8B%E5%85%A5%E9%97%A8.pdf"
    decoded_name = unquote(encoded_name)
    # 结果: Python编程入门.pdf
    

二、优化你的PDF下载代码

看你提供的代码,核心问题应该是文件名处理:如果pdfUrl里的文件名是URL编码后的(比如包含中文、空格这类特殊字符),直接用os.path.basename()拿到的会是一堆%xx的编码串,保存出来的文件名既不友好也可能乱码。我们可以先解码URL,再提取文件名。

改进后的代码如下:

import os
import requests
from urllib.parse import unquote

for pdf in preTag:
    pdfUrl = "https://the-eye.eu/public/Books/Programming/" + pdf.get("href")
    print("Downloading...%s" % pdfUrl)
    
    # 发起请求并确保请求成功
    page = requests.get(pdfUrl)
    page.raise_for_status()
    
    # 关键:先解码URL,再提取可读的文件名
    decoded_url = unquote(pdfUrl)
    pdf_filename = os.path.basename(decoded_url)
    
    # 拼接保存路径,用上下文管理器自动关闭文件
    save_path = os.path.join(filePath, pdf_filename)
    with open(save_path, "wb") as pdfFile:
        for chunk in page.iter_content(1000000):
            pdfFile.write(chunk)
    
    print(f"✅ 下载完成:{pdf_filename}")

几个小改进点:

  • 用unquote()解码后再取文件名,确保保存的是原始的可读名称(比如中文文件名不会变成编码后的乱码形式)
  • 改用with open()上下文管理器,不用手动调用close(),避免忘记关闭文件导致的问题
  • 增加了下载完成的提示,方便你跟踪下载进度

如果pdf.get("href")本身已经是编码后的字符串,你也可以先单独解码href再拼接URL,效果是一样的:

decoded_href = unquote(pdf.get("href"))
pdfUrl = "https://the-eye.eu/public/Books/Programming/" + decoded_href

内容的提问来源于stack exchange,提问作者user9440272

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:36:31