最近不少初学者在找一套能一口气学完的 Python 教程。B 站这类平台上有一批非常热门的视频合集,标题往往带着“全 500 集”“零基础全套”“从小白到大神”这些关键词,内容把 Python 基础语法、爬虫和数据分析打包在了一起。这类教程的优势很直接:学习路径是提前排好的,不需要自己东拼西凑找资料。但也正因为集数多、跨度大,很多同学学着学着就掉队了。
本文不打算替任何 UP 主背书,而是从“如何系统学完 Python 零基础内容”的角度,把这类教程背后的知识主线拆解出来,并配上一套可以动手运行的环境配置、语法示例、爬虫案例和数据分析案例。你可以把重点放在“知识主线”和“完整代码”上,把视频当辅助讲解,而不是被“500 集”这个宣传数字吓退。
1. 为什么 Python 零基础自学容易半途而废
1.1 资料多但不成体系
Python 可以说是目前中文互联网上免费学习资料最多的编程语言之一。搜“Python 入门”,你能找到视频、博客、思维导图、PDF、开源项目,甚至还有各种训练营的试听课。资料多本来是好事,但对零基础的人来说,反而容易陷入选择困难。
今天看一个视频学列表,明天看另一篇博客学字典,后天又跟着某个实战项目敲了几十行代码,结果发现这几个知识点之间没有串联起来。学了一段时间后,最明显的感受是“好像都见过,但又什么都不会写”。
这就是不成体系的学习带来的问题。所以真正有用的零基础教程,不只是把知识点罗列出来,而是要有一条清晰的主线:先学什么、后学什么、每个阶段能做什么。这也是“全 500 集”这类合集能吸引大量收藏的原因——不管它实际有多少集,至少它给了一个看起来完整的学习路径。
1.2 一套合格零基础教程的核心特征
结合我自己接触过的初学者问题,一套能真正带人入门的 Python 教程,通常具备几个特征:
- 概念讲得通俗,不堆术语。比如讲变量时,会先从“给数据起名字”这个角度切入,而不是直接讲内存地址。
- 知识点之间有练习衔接。学完列表和字典后,会有一个小练习要求你组合使用它们。
- 越到后面越接近真实项目。爬虫和数据分析本来就是 Python 最常用的两个方向,能直接产出“看得见的结果”。
- 对常见报错有解释。零基础最怕的不是不会写,而是报错了不知道怎么改。
如果你找到的教程能满足这几点,那它的集数多反而说明覆盖得细。怕的是那种把简单问题复杂化、一直停留在语法层面的教程。
1.3 一条完整的学习主线
把“基础语法 + 爬虫 + 数据分析”三者串起来,是 Python 零基础学习里性价比很高的一条路线。基础语法解决“能不能写代码”的问题;爬虫解决“怎么获取数据”的问题;数据分析解决“拿到数据后怎么处理、怎么得出结论”的问题。
一条典型的主线是:
- 环境搭建:安装 Python、配置编辑器、掌握虚拟环境。
- 基础语法:变量、数据类型、条件、循环、函数、文件读写。
- 常用库入门:requests、pandas 等第三方库的安装与使用思路。
- 爬虫实战:请求网页、解析 HTML、保存结果。
- 数据分析实战:数据读取、清洗、分组统计、可视化。
接下来我从环境准备开始,逐步把这套主线跑通。每个部分都会给出可复制的代码,建议你边看边敲。
2. 环境准备与版本说明
2.1 Python 解释器安装与版本选择
无论你看的是哪套视频教程,第一步都是装 Python 解释器。版本建议选择 Python 3,目前 3.8 到 3.12 都属于比较稳定的范围。如果你是新学习,直接装 3.10 或 3.11 都可以,遇到具体问题再根据项目要求调整。
Windows 下安装时,有一个非常关键的选项:一定要勾选 “Add Python to PATH”。否则后面在命令行里执行python命令,系统会提示“不是内部或外部命令”。
安装完成后,打开命令行工具,Windows 推荐 PowerShell,macOS / Linux 推荐 Terminal,运行下面命令验证:
python --version pip --version正常情况下会输出类似:
Python 3.11.9 pip 24.0如果你电脑上同时装了多个 Python 版本,可能需要用python3代替python。这一步属于环境差异,不影响后面代码逻辑。
2.2 用 VSCode 搭建轻量开发环境
编辑器推荐 Visual Studio Code,免费、跨平台、插件生态丰富。安装完成后,在扩展商店搜索“Python”,安装微软官方提供的 Python 扩展。这个扩展包含了代码补全、语法检查、调试、Jupyter 支持等功能,能覆盖初学者 90% 的日常需求。
安装好扩展后,打开任意文件夹,新建一个test.py文件,输入:
print("Hello, Python")点击右上角的运行按钮,就能在终端看到输出。这一步的目的是确认编辑器能正确识别你安装的 Python 解释器。如果右下角提示选择解释器,就选刚才安装的那个版本。
2.3 虚拟环境与依赖管理
随着项目变多,不同项目可能会依赖不同版本的第三方库。为了不让它们互相干扰,初学者可以尽早养成使用虚拟环境的习惯。
Python 3 自带venv模块,不需要额外安装。在项目根目录执行:
python -m venv venvWindows 激活虚拟环境:
venv\Scripts\activatemacOS / Linux 激活虚拟环境:
source venv/bin/activate激活后,命令行前面会出现(venv)标识,说明你已经在虚拟环境中。后续pip install安装的包都只会装到这个环境里,不会污染全局环境。
后续如果需要导出依赖清单,可以执行:
pip freeze > requirements.txt在另一台机器上恢复环境时,执行:
pip install -r requirements.txt这是一个很实用的工程习惯,后面爬虫和数据分析项目都会用到。
3. Python 核心语法精讲
3.1 变量、数据类型与常用容器
Python 是一门动态类型语言,声明变量不需要写类型。这一点让初学者上手很快,但也需要理解背后“变量是对象的引用”这个基本概念。
name = "张三" age = 18 score = 92.5 is_pass = True print(name, age, score, is_pass) print(type(age)) print(type(score))输出:
张三 18 92.5 True <class 'int'> <class 'float'>除了基础类型,最常用的就是列表和字典。列表是有序序列,字典是键值对映射。它们在爬虫和数据分析中会频繁出现:
fruits = ["apple", "banana", "orange"] student = {"name": "李四", "age": 20, "city": "上海"} print(fruits[0]) print(student["name"]) fruits.append("grape") student["score"] = 88 print(fruits) print(student)这段代码演示了两个关键操作:通过索引访问列表、通过键访问字典,以及往容器中新增元素。后面操作爬虫解析结果时,你会经常把数据存成“列表套字典”的结构。
3.2 条件判断与循环
条件判断和循环是所有编程语言的核心控制结构。Python 用缩进表示代码块,这一点初学者一定要适应。缩进不仅是为了好看,更是语法的一部分。
score = 85 if score >= 90: print("优秀") elif score >= 60: print("及格") else: print("不及格")再看循环。for循环配合range可以实现固定次数的遍历,配合列表可以逐个处理元素:
for i in range(3): print("第", i, "次循环") fruits = ["apple", "banana", "orange"] for fruit in fruits: if len(fruit) > 5: print(fruit)这里len(fruit) > 5会过滤出长度超过 5 的字符串。初学者经常忽略缩进导致条件判断没生效,这类问题在学循环的时候最容易暴露。
3.3 函数与内置模块
函数的作用是封装一段可复用的逻辑。初学者不用一开始就追求写得多么优雅,但要明白“输入参数、返回结果”这个模型:
def calc_avg(scores): if len(scores) == 0: return 0 return sum(scores) / len(scores) class_scores = [80, 90, 100] print(calc_avg(class_scores))这里定义了一个计算平均分的函数,包含了空列表保护、sum和len两个内置函数的使用。学会拆分成函数后,你会发现自己写代码的逻辑会越来越清楚。
Python 还有一个非常强大的地方:标准库模块。比如读取本地文件:
with open("data.txt", "r", encoding="utf-8") as f: content = f.read() print(content)with语句能在代码块结束后自动关闭文件,避免资源泄漏。这是写文件操作时推荐的标准写法。
3.4 异常处理
程序运行时难免出现错误。零基础阶段最容易忽视的就是异常处理,但爬虫和数据分析中,网络请求失败、数据格式不对、文件找不到都是高频问题。
try: num = int(input("请输入一个数字:")) result = 10 / num print("结果是:", result) except ValueError: print("你输入的不是数字") except ZeroDivisionError: print("不能除以 0") finally: print("程序执行结束")try块中一旦出现异常,程序会跳转到对应的except分支,finally块则无论是否出错都会执行。这个机制在爬虫场景中非常重要,比如某个页面请求超时,不能因为一个异常就让整个爬虫程序崩溃。
4. 爬虫入门实战:从请求网页到解析数据
4.1 爬虫能做什么,边界在哪里
爬虫是 Python 最受欢迎的应用方向之一。它的本质是:用程序模拟浏览器向服务器发起网络请求,拿到响应内容后,从中提取结构化数据。
但爬虫也有非常严格的边界。入门练习时,只允许采集你拥有合法授权、或目标网站明确允许采集的公开数据。比如自己搭建的测试站点、开源项目提供的公开接口、一些网站明确声明可用的测试 URL。不要对未授权网站进行高并发抓取,不要采集个人隐私信息,不要绕过登录和技术限制。这一条应该成为练习爬虫时的基本原则。
4.2 安装 requests 与 BeautifulSoup4
请求库使用requests,解析库使用beautifulsoup4。在激活的虚拟环境中安装:
pip install requests beautifulsoup4requests负责发送 HTTP 请求并接收响应,BeautifulSoup负责解析返回的 HTML 内容。它们组合起来能完成大多数静态页面爬虫。
4.3 第一个请求:状态码、响应头与编码
先写一个最简单的请求示例。目标 URL 使用https://example.com,这是专门用于文档演示的保留域名,内容稳定且适合学习。
import requests url = "https://example.com" resp = requests.get(url, timeout=10) print("状态码:", resp.status_code) print("响应头 Content-Type:", resp.headers.get("Content-Type")) print("页面内容长度:", len(resp.text)) print(resp.text[:300])关键点:
status_code是 HTTP 状态码,200 表示成功,404 表示页面不存在,403 表示禁止访问。resp.text是经过解码后的文本内容。resp.encoding可以查看当前编码。如果出现中文乱码,可以尝试resp.encoding = resp.apparent_encoding。
4.4 解析 HTML:BeautifulSoup 基础
拿到 HTML 文本后,需要使用解析器提取目标数据。先看一个不依赖网络的本地 HTML 示例:
html_doc = """ <html> <head><title>测试页面</title></head> <body> <div class="news-item"> <h2>Python 3.12 发布</h2> <span class="date">2024-01-01</span> </div> <div class="news-item"> <h2>数据分析入门指南</h2> <span class="date">2024-02-01</span> </div> </body> </html> """ from bs4 import BeautifulSoup soup = BeautifulSoup(html_doc, "html.parser") title = soup.title.string print("页面标题:", title) items = soup.select(".news-item") for item in items: h2 = item.find("h2").get_text() date = item.find("span", class_="date").get_text() print(f"标题: {h2} | 日期: {date}")select方法支持 CSS 选择器,soup.select(".news-item")会选取所有class为news-item的标签。find("h2")是在某个标签内部查找第一个h2标签。get_text()用于提取标签内的纯文本。
4.5 完整示例:采集页面列表数据
把 requests 和 BeautifulSoup 组合起来,就能实现一个完整的“请求 → 解析 → 输出”流程。下面以某个公开示例页面为演示目标,你需要把 URL 替换成你有权采集的目标地址:
import requests from bs4 import BeautifulSoup url = "https://example.com" # 替换为你有权采集的目标 URL headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " "AppleWebKit/537.36 (KHTML, like Gecko) " "Chrome/120.0 Safari/537.36" } try: resp = requests.get(url, headers=headers, timeout=10) resp.encoding = resp.apparent_encoding resp.raise_for_status() # 状态码不是 2xx 时抛出异常 soup = BeautifulSoup(resp.text, "html.parser") # 根据目标页面的实际结构修改选择器 items = soup.select(".some-list li") for item in items[:10]: title = item.get_text(strip=True) print(title) except requests.RequestException as e: print("请求失败:", e)这个示例体现了几个工程细节:
- 添加
User-Agent头,模拟浏览器访问,降低被服务端拒绝的概率。 - 用
raise_for_status()主动检查请求是否成功。 - 用
try / except捕获网络异常,避免程序崩溃。 - 解析选择器需要根据实际页面结构调整。
爬虫入门阶段的核心能力,就是能看懂 HTML 结构,并写出正确的选择器。建议在浏览器开发者工具中,用“检查”功能查看目标元素的标签和 class,再映射到 BeautifulSoup 的解析逻辑中。
5. 数据分析入门实战
5.1 pandas:表格数据处理的瑞士军刀
Python 数据分析离不开 pandas。它提供了一种叫DataFrame的数据结构,可以把它理解成一张内存中的 Excel 表格,支持筛选、排序、分组、合并、数据清洗等操作。
安装依赖:
pip install pandas matplotlib openpyxl先创建一个最简单的 DataFrame:
import pandas as pd data = { "姓名": ["张三", "李四", "王五", "张三", "李四"], "城市": ["北京", "上海", "广州", "北京", "上海"], "销售额": [100, 200, 150, 120, 210], "日期": ["2024-01-01", "2024-01-01", "2024-01-02", "2024-01-03", "2024-01-03"] } df = pd.DataFrame(data) print(df.head())head()默认显示前 5 行。还可以用df.info()查看每列的类型和缺失值情况,用df.describe()查看数值列的统计信息。
5.2 数据读取与初步观察
实际项目中,数据通常来自 CSV、Excel 或数据库。pandas 可以一行代码读取:
# 读取 CSV df = pd.read_csv("sales.csv") # 读取 Excel 需要 openpyxl 引擎 df_excel = pd.read_excel("sales.xlsx", sheet_name="Sheet1")如果没有现成文件,也可以把前面字典构造的 DataFrame 保存成 CSV 再读回来:
df.to_csv("sales.csv", index=False, encoding="utf-8-sig") df_read = pd.read_csv("sales.csv") print(df_read.head())这里index=False表示不保存行索引,encoding="utf-8-sig"能避免 Excel 打开 CSV 时中文乱码。
5.3 数据清洗:缺失值、重复值、类型转换
真实数据经常不干净。常见问题包括:空值、重复行、类型错误、文本前后有空格等。下面是一些标准处理方法:
# 检查每列缺失值数量 print(df.isnull().sum()) # 删除包含缺失值的行 df_clean = df.dropna() # 删除重复行 df_clean = df_clean.drop_duplicates() # 类型转换 df_clean["销售额"] = df_clean["销售额"].astype(float) df_clean["日期"] = pd.to_datetime(df_clean["日期"])需要注意的是:dropna()默认会删除只要有一列缺失就整行删除。如果某些列缺失比例很高,也可以先考虑填充,比如用均值填充:
df["销售额"].fillna(df["销售额"].mean(), inplace=True)对于学习阶段,更推荐先理解“检查缺失值 → 决定删除还是填充 → 验证结果”这个思路。
5.4 分组统计与合并汇总
数据分析中最常见的需求是“按某个维度汇总”。比如想知道每个城市的总销售额,可以用groupby:
city_sales = df.groupby("城市")["销售额"].sum().reset_index() print(city_sales)输出:
城市 销售额 0 上海 410 1 北京 220 2 广州 150groupby("城市")表示按城市分组,["销售额"].sum()表示对销售额列求和,reset_index()把结果重新转成普通的 DataFrame,方便后续继续处理或导出。
多列汇总也很常用,比如按“城市 + 日期”两个维度同时统计:
daily_city_sales = df.groupby(["城市", "日期"])["销售额"].sum() print(daily_city_sales)从这个结果里,你可以直观感受 pandas 在数据聚合上的表达能力。
5.5 可视化:让数据说话
数据分析最后一步通常是可视化。matplotlib 是 Python 最基础的绘图库,pandas 也内置了基于它实现的绘图接口。
import matplotlib.pyplot as plt # 解决中文乱码 plt.rcParams["font.sans-serif"] = ["SimHei"] # Windows 黑体 plt.rcParams["axes.unicode_minus"] = False # 解决负号显示问题 city_sales.plot(kind="bar", x="城市", y="销售额", legend=False) plt.title("各城市销售额汇总") plt.ylabel("销售额") plt.show()如果用的是 macOS,字体名可能需要改成["Arial Unicode MS"]或["PingFang SC"]。中文乱码是初学者经常遇到的小问题,本质上就是字体缺失或默认字体不支持中文。
把爬虫和数据分析连起来看,整个流程就是:通过爬虫拿到原始数据,通过 pandas 清洗整理,通过 matplotlib 输出图表。这也是 Python 在数据领域最典型的工作方式。
6. 常见问题与排查思路
学习过程中,你一定会在环境、爬虫、数据分析三个环节遇到各种报错。下面整理了一些高频问题及解决思路。
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
pip install速度慢或超时 | 默认源在国外 | 配置国内镜像源,例如清华 PyPI 镜像 |
ModuleNotFoundError: No module named 'requests' | 包未安装或虚拟环境未激活 | 确认激活虚拟环境后执行pip install requests |
Windows 提示'python' 不是内部或外部命令 | 安装时未勾选 Add Python to PATH | 重新安装并勾选,或手动配置环境变量 |
| 爬虫请求返回 403 | 服务器识别出非浏览器请求 | 添加 User-Agent、Referer 等请求头 |
| 爬虫输出乱码 | 响应编码与默认解码不一致 | 设置resp.encoding = resp.apparent_encoding |
| pandas 读取 Excel 报错 | 缺少 Excel 引擎 | 执行pip install openpyxl |
| matplotlib 中文显示为方块 | 中文字体缺失 | 设置plt.rcParams["font.sans-serif"]为中文字体 |
DataFrame 没有plot属性 | 未安装 matplotlib | 执行pip install matplotlib |
除了表里这些问题之外,还有一个特别容易被忽略的排查方向:当前代码到底运行在哪个 Python 环境里。尤其是你明明已经pip install了某个包,但执行脚本时依然报 ModuleNotFoundError,那么多半是虚拟环境没有激活,或者 VSCode 选择的解释器和你命令行里的解释器不是同一个。排查时先运行which python(Windows 用where python),确认环境没有问题,再去检查包是否真的安装成功了。
7. 爬虫与数据分析的工程化建议
7.1 代码规范与可读性
初学阶段写代码,最大的评判标准不是“跑通就行”,而是“过几天再看还能不能看懂”。建议从一开始就养成几个习惯:
- 变量名用英文单词,不使用拼音或 a、b、c 这类无意义名称。
- 函数名使用小写字母加下划线,例如
fetch_page、calc_avg。 - 关键步骤加注释,但注释不要写废话,而是解释“为什么这么做”。
- 每个脚本只做一件事,尽量拆分成短小的函数。
比如爬虫脚本,不要把所有逻辑堆在main()里,而是拆成fetch_page、parse_html、save_data三个函数。这样后续改动某个环节时,不需要重新阅读全部代码。
7.2 爬虫的合规与礼貌
爬虫入门后,很多人会想立刻抓各种网站。这里再次强调几条底线:
- 采集前先看目标网站的
robots.txt,在https://example.com/robots.txt这类路径下可以查看允许抓取的目录。 - 控制请求频率,在循环中加入
time.sleep(1)或更长间隔,避免对对方服务器造成压力。 - 不采集个人隐私信息,不绕过登录认证,不使用代理池大量抓取。
- 仅将爬虫用于学习、测试和合法授权的目标。
实际项目中,如果目标网站提供了官方 API,应该优先使用 API,而不是爬虫。爬虫只应作为没有 API 时的补充方案。
7.3 数据项目的可复现性
数据分析项目要保证别人拿到你的脚本和数据后,能复现出相同结果。具体做法包括:
- 使用虚拟环境,并导出
requirements.txt。 - 原始数据不随意修改,清洗操作生成新文件而不是覆盖原文件。
- 固定随机种子,避免结果随运行变化。
- 清洗脚本和绘图脚本分离,方便单独运行。
如果你的数据来自爬虫,建议把采集到的原始数据保存为 CSV 或 JSON,再进入清洗阶段。不要每次分析都重新跑一遍爬虫,既能节省时间,也能避免目标网站变动带来的不确定性。
7.4 安全与敏感信息保护
爬虫和数据分析项目经常需要访问第三方服务,可能会涉及 Cookie、Token、数据库密码等敏感信息。这些信息一旦写死在代码里,再不小心推到公开仓库,就会造成泄露风险。更安全的做法是把敏感信息放到环境变量或配置文件中,并在代码中注入:
import os token = os.getenv("API_TOKEN") if not token: raise RuntimeError("缺少 API_TOKEN 环境变量")另外还需要注意:Python 脚本中写入文件、连接数据库、执行删除或更新操作时,都要遵循最小权限原则。学习阶段尽量使用独立测试数据和本地环境,不要对生产环境数据进行未经验证的改动。
8. 给初学者的几条学习建议
最后说一点更“实在”的建议。很多初学者收藏了一套视频后,很容易陷入“只看不练”的状态。视频里讲师敲代码很流畅,但如果你只是坐着看,代码并不会真正长在脑子里。我自己见过太多人,收藏夹里几百个视频,真正打开练习的不超过十个。
如果你想把这套“基础语法 + 爬虫 + 数据分析”的路线走完,可以尝试给自己定几条规则:
- 每看一个视频小节,就暂停一次,自己把示例手动敲一遍。
- 学完一个阶段后,做一个不依赖教程的小练习。比如学完列表和字典,就写一个“统计一段文本中每个单词出现次数”的小程序。
- 学完爬虫后,找一个你每天都会访问的公开网站,在不违法、不侵权、不绕过认证的前提下,尝试抓取页面上的公开信息。
- 学完数据分析后,把自己生活中的数据拿来做练习,比如记账记录、手机里的运动数据,都可以整理成表格并跑一遍清洗和分析流程。
本文的核心代码都是为了让你能直接跑起来而写的。你可以在本地建一个项目目录,按照“环境准备 → 基础语法 → 爬虫 → 数据分析”的顺序,把每个示例依次运行一遍。遇到报错不要慌,把错误信息复制到搜索引擎里查,或者对照第 6 节的排查思路检查环境、依赖和数据格式。
Python 入门不是一个“看完 500 集视频”就能完成的任务,而是一个“持续动手解决实际问题”的过程。把教程当作地图,把代码练习当作脚步,你才能真正从小白走向能独立写爬虫、做数据分析的开发者。