所属专题:Python 专题导航:基础语法、工具与实践

Python零基础七日通关:从环境搭建到首个爬虫实践

Python零基础七日通关:从环境搭建到首个爬虫实践 - 暂无配图,技术文章默认封面

学习目标与边界

七天不能让人“精通” 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)

请 登录 后发表评论, 还没有账户?立即注册

暂无评论,快来抢沙发吧!