学习目标与边界
七天不能让人“精通” Python,但可以完成一条可复现的入门路径:安装解释器、编写函数、处理文件、发起带超时的 HTTP 请求,并把结果安全地写入 CSV。每天保存能运行的最小脚本,比堆叠术语更容易发现问题。
示例使用 Python 3.11+,命令在 Windows PowerShell、macOS 和 Linux 上都可按对应写法执行。访问第三方网站前要阅读其 robots.txt、服务条款和隐私要求,控制频率,不采集不应处理的个人数据。
第 1 天:安装与虚拟环境
python3 --version
python3 -m venv .venv
macOS/Linux 激活:
source .venv/bin/activate
python -m pip install --upgrade pip
Windows PowerShell 激活:
py -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
如果系统中有多个 Python,先确认 python --version 和 pip --version 指向同一虚拟环境,再安装依赖。
第 2 天:变量、条件和函数
def classify_score(score: int) -> str:
if score >= 90:
return "excellent"
if score >= 60:
return "pass"
return "retry"
for value in (95, 72, 48):
print(value, classify_score(value))
函数明确输入类型和返回值,遇到非法输入时应决定是抛出异常还是返回错误结果。不要把所有代码堆在一个脚本顶层,后续测试和复用都会更困难。
第 3 天:列表、字典与异常
posts = [
{"title": "SEO 基础", "views": 12},
{"title": "Python 入门", "views": 7},
]
popular = [post for post in posts if post["views"] >= 10]
print([post["title"] for post in popular])
读取外部数据时,处理字段缺失和类型错误:
def read_views(row: dict) -> int:
try:
return int(row.get("views", 0))
except (TypeError, ValueError):
return 0
第 4 天:文件与 CSV
不要用 split(',') 手动拆 CSV,因为字段本身可能包含逗号、引号或换行。使用标准库的 csv.DictReader:
import csv
from pathlib import Path
with Path("posts.csv").open("r", encoding="utf-8-sig", newline="") as source:
for row in csv.DictReader(source):
title = (row.get("title") or "").strip()
if title:
print(title)
写出 CSV 时指定字段顺序和换行参数,避免不同平台产生空行或编码问题。
第 5 天:带边界的 HTTP 请求
安装 requests 后,所有外部请求都应设置超时、检查状态码并使用清晰的 User-Agent:
python -m pip install requests
import requests
response = requests.get(
"https://blog.zenleak.cn/",
headers={"User-Agent": "ZenLeakLearningBot/1.0 (+https://blog.zenleak.cn/about/)"},
timeout=(5, 15),
)
response.raise_for_status()
print(response.url, response.status_code, len(response.text))
真实采集前检查 robots.txt 和服务条款,使用合理间隔、缓存和最大页数。遇到 429、5xx 或明确拒绝时停止并记录原因,不要通过更换 User-Agent 绕过限制。
第 6 天:解析与保存
只解析任务需要的字段,并对 HTML 结构变化做好空值处理。采集结果写入 CSV 或 SQLite 时保留抓取时间和来源 URL,便于复核和删除。不要把登录后页面、个人资料或受版权保护的完整内容当作练习数据。
from datetime import datetime, timezone
record = {
"source_url": response.url,
"fetched_at": datetime.now(timezone.utc).isoformat(),
"status": response.status_code,
}
print(record)
第 7 天:测试、日志与复盘
为纯函数写最小测试,为网络层测试超时、非 2xx 和空响应。日志中记录请求 URL、状态和耗时,不要写入 Cookie、Authorization 或其他敏感信息。把依赖写入 requirements.txt,并保存一份可回退的示例数据。
python -m compileall src
python -m unittest discover -s tests
后续学习路径
完成七天练习后,可以继续学习类型标注、pytest、异步 IO、SQLite、Django 和任务队列。本站的 Django 博客实战 展示了如何把模型、视图、模板和部署串起来;SEO 发布后监控实战 则适合练习 HTTP 状态、日志和数据复核。
Python 入门的关键不是记住固定数量的库,而是能说明依赖版本、输入边界、异常处理、权限和数据来源。每个示例都能运行、能解释、能安全停止,才是可继续维护的基础。
评论 (0)
暂无评论,快来抢沙发吧!