Python用wget爬取特定URL遇.tmp文件NotFoundError问题求助
问题分析
错误的核心是Windows系统默认的路径长度限制(260字符)。目标文件URL解码后生成的文件名过长,加上临时文件后缀后,总路径长度超过了Windows允许的最大值,导致tempfile.mkstemp无法创建临时文件,抛出FileNotFoundError。
解决方案
1. 手动指定短文件名下载
直接给下载文件指定简短文件名,绕过URL自动生成的长文件名限制。修改代码如下:
import os import wget def download_file(url, save_path): try: print("Downloading file...") wget.download(url, save_path) print("\nDownload complete!") except Exception as e: print(f"An error occurred: {e}") if __name__ == "__main__": file_url = "https://upload.wikimedia.org/wikipedia/commons/a/a7/CADAL06210101_%E7%9A%87%E6%B8%85%E7%B6%93%E8%A7%A3%E7%BA%8C%E7%B7%A8%EF%BC%9A%E6%98%93%E5%9C%96%E6%A2%9D%E8%BE%AE%E7%9A%87%E6%B8%85%E7%B6%93%E8%A7%A3%E7%BA%8C%E7%B7%A8%EF%BC%9A%E8%99%9E%E6%B0%8F%E6%98%93%E4%BA%8B.djvu" # 使用极短文件名,确保路径总长度在限制内 save_location = os.path.join("C:\\temp", "short_file.djvu") download_file(file_url, save_location)
若仍无效,检查工作目录路径是否过长,直接使用更短的根目录(如C:\temp)即可。
2. 启用Windows长路径支持
修改系统设置解除260字符限制:
- 按下
Win+R输入regedit打开注册表编辑器 - 定位到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem - 找到
LongPathsEnabled项,将其值改为1(不存在则新建DWORD(32位)值) - 重启电脑后生效
3. 改用requests库手动下载(更可控)
如果wget库的临时文件逻辑无法满足需求,改用requests库完全控制下载流程:
import requests def download_with_requests(url, save_path): try: with requests.get(url, stream=True) as r: r.raise_for_status() with open(save_path, 'wb') as f: for chunk in r.iter_content(chunk_size=8192): f.write(chunk) print("Download complete!") except Exception as e: print(f"An error occurred: {e}") if __name__ == "__main__": file_url = "https://upload.wikimedia.org/wikipedia/commons/a/a7/CADAL06210101_%E7%9A%87%E6%B8%85%E7%B6%93%E8%A7%A3%E7%BA%8C%E7%B7%A8%EF%BC%9A%E6%98%93%E5%9C%96%E6%A2%9D%E8%BE%AE%E7%9A%87%E6%B8%85%E7%B6%93%E8%A7%A3%E7%BA%8C%E7%B7%A8%EF%BC%9A%E8%99%9E%E6%B0%8F%E6%98%93%E4%BA%8B.djvu" save_location = "C:\\temp\\target.djvu" download_with_requests(file_url, save_location)
验证方法
优先测试方案1,给文件指定极短保存路径(如C:\test.djvu),若能正常下载,即可确认是长文件名导致的问题。
内容的提问来源于stack exchange,提问作者Jung Woo Sohn
相关产品推荐
相关产品推荐

