- 您想找1001个与Python下载相关的资源或教程。
- 您想学习如何用Python代码实现下载功能(例如下载文件、网页等),并且希望有非常全面的示例(1001个可能是个夸张的说法,表示“非常全面”)。
根据问题的常见性,我猜测您更可能是想了解第二种情况:如何用Python编写下载脚本,这是一个非常实用且常见的编程任务。

下面我将为您提供一份从入门到精通的Python下载指南,涵盖了从最简单的下载到处理复杂场景(如登录、动态加载)的各种方法。
Python 下载终极指南
我们将使用几种不同的库和方法,以应对不同的下载需求。
下载一个简单的静态文件(如图片、PDF、CSV)
这是最基础的需求,我们可以使用 Python 内置的 urllib 库或者第三方流行的 requests 库。
方法 1:使用 requests 库 (推荐)
requests 库语法简洁,功能强大,是处理HTTP请求的首选。

第一步:安装 requests
pip install requests
第二步:编写下载脚本
import requests
import os
def download_file(url, file_path):
"""
从指定URL下载文件并保存到本地路径
"""
try:
# 发送 GET 请求,stream=True 表示流式下载,节省内存
response = requests.get(url, stream=True)
response.raise_for_status() # 如果请求失败 (状态码不是 2xx),则抛出异常
# 获取文件名(从URL中提取)
# 如果URL没有文件名,可以使用一个默认名
file_name = os.path.basename(url)
if not file_name:
file_name = "downloaded_file"
# 确保文件名是有效的
if not file_name.endswith(('.jpg', '.png', '.pdf', '.csv', '.txt')):
# 如果没有扩展名,可以尝试从Content-Type获取,或者直接添加
content_type = response.headers.get('content-type', '')
if 'image' in content_type:
file_name += '.jpg' # 假设是图片
else:
file_name += '.dat' # 未知类型
# 完整的保存路径
save_path = os.path.join(file_path, file_name)
print(f"开始下载: {url}")
print(f"保存到: {save_path}")
# 使用 with open 写入文件,chunk_by_chunk 防止内存溢出
with open(save_path, 'wb') as f:
for chunk in response.iter_content(chunk_size=8192): # 8KB的块
f.write(chunk)
print(f"下载完成!文件已保存至: {save_path}")
return save_path
except requests.exceptions.RequestException as e:
print(f"下载失败: {e}")
return None
# --- 使用示例 ---
if __name__ == "__main__":
# 要下载的文件URL
file_url = "https://www.python.org/static/community_logos/python-logo-master-v3-TM.png"
# 你想保存文件的本地文件夹
save_directory = "downloaded_files"
# 如果文件夹不存在,则创建
if not os.path.exists(save_directory):
os.makedirs(save_directory)
# 调用函数下载文件
download_file(file_url, save_directory)
方法 2:使用 urllib (无需安装)
urllib 是 Python 的标准库,无需额外安装,但语法相对繁琐一些。
import urllib.request
import os
def download_file_urllib(url, file_path):
try:
file_name = os.path.basename(url)
save_path = os.path.join(file_path, file_name)
print(f"开始下载 (urllib): {url}")
urllib.request.urlretrieve(url, save_path) # 直接下载到指定路径
print(f"下载完成!文件已保存至: {save_path}")
return save_path
except Exception as e:
print(f"下载失败: {e}")
return None
# --- 使用示例 ---
if __name__ == "__main__":
file_url = "https://www.python.org/static/community_logos/python-logo-master-v3-TM.png"
save_directory = "downloaded_files_urllib"
if not os.path.exists(save_directory):
os.makedirs(save_directory)
download_file_urllib(file_url, save_directory)
下载一个网页(HTML内容)
这通常是为了抓取网页数据。requests 同样是最佳选择。
import requests
def download_webpage(url):
"""
下载指定URL的网页内容
"""
try:
# 设置一个User-Agent,模拟浏览器访问,避免被某些网站拦截
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)
response.raise_for_status() # 检查请求是否成功
# response.text 获取解码后的文本内容
html_content = response.text
print(f"成功下载网页: {url}")
# print(html_content[:500]) # 打印前500个字符
return html_content
except requests.exceptions.RequestException as e:
print(f"下载网页失败: {e}")
return None
# --- 使用示例 ---
if __name__ == "__main__":
webpage_url = "http://quotes.toscrape.com/" # 一个为爬虫练习设计的网站
content = download_webpage(webpage_url)
if content:
# 可以将内容保存到文件
with open("quotes.html", "w", encoding="utf-8") as f:
f.write(content)
print("网页内容已保存到 quotes.html")
处理需要登录才能访问的页面
很多网站需要登录后才能下载资源,这通常涉及到 Cookies 或 Session 的管理。
import requests
def download_with_session(login_url, download_url, username, password):
"""
使用 Session 处理需要登录的下载
"""
# 创建一个 Session 对象
with requests.Session() as session:
# 1. 访问登录页,获取必要的token(如果需要)
# login_page = session.get(login_url)
# ... 解析 login_page.text 获取CSRF token等 ...
# 2. 准备登录数据
# 注意:这里的 'username', 'password', 'csrf_token' 是占位符
# 你需要用实际的表单字段名替换
login_data = {
'username': username,
'password': password,
# 'csrfmiddlewaretoken': '...' # 如果网站有CSRF保护
}
# 3. 发送登录请求
print("正在登录...")
login_response = session.post(login_url, data=login_data)
# 检查登录是否成功 (检查是否重定向到首页或登录失败的关键字)
if "登录失败" in login_response.text or login_response.url == login_url:
print("登录失败,请检查用户名和密码,或表单字段名是否正确。")
return None
print("登录成功!")
# 4. 使用已登录的 Session 下载文件
print("正在下载受保护的文件...")
download_response = session.get(download_url, stream=True)
download_response.raise_for_status()
file_name = "protected_file.zip"
with open(file_name, 'wb') as f:
for chunk in download_response.iter_content(chunk_size=8192):
f.write(chunk)
print(f"文件 {file_name} 下载完成!")
# --- 使用示例 ---
if __name__ == "__main__":
# !!! 注意:以下仅为示例,你需要替换成真实的网站信息 !!!
# LOGIN_URL = "https://example.com/login/"
# DOWNLOAD_URL = "https://example.com/protected/resource.zip"
# USERNAME = "your_username"
# PASSWORD = "your_password"
# 由于没有真实网站,这里注释掉调用
# download_with_session(LOGIN_URL, DOWNLOAD_URL, USERNAME, PASSWORD)
print("请取消注释并填写真实的登录和下载URL来测试此功能。")
处理由 JavaScript 动态加载的内容
现代网站(如单页应用 SPA)很多内容是通过 JavaScript 在浏览器中动态加载的。requests 只能获取初始的 HTML,看不到 JS 渲染后的内容,这时我们需要一个“无头浏览器”。
使用 selenium + webdriver
Selenium 可以模拟一个真实的浏览器,执行 JavaScript,然后获取最终渲染后的页面。
第一步:安装 selenium
pip install selenium
第二步:下载浏览器驱动 Selenium 需要一个浏览器驱动来控制你的浏览器(如 Chrome, Firefox)。
- ChromeDriver: [https://googlechromelabs.github.io
