之前带过不少零基础学员,发现大家学 Python 最容易掉进同一个坑:今天看视频,明天翻文章,后天又去刷题库,知识点零散得像拼图碎片,等到真正想用 Python 做点东西时,反而连环境都配不明白。如果你也正处于“收藏了一堆教程但还没开始写代码”的状态,这篇内容应该能帮你把路线理顺。
这篇文章会围绕 Python 零基础入门、网络爬虫、数据分析三部分展开,给出可以照着敲的代码示例,也会把爬虫和数据分析里最常见的报错、坑点、工程习惯一起讲清楚。无论是准备转行、做毕业设计,还是工作中想用脚本提效,都可以把它当成一份“从安装到出图”的完整操作笔记。
1. Python 零基础学习路线:先看清地图再出发
很多初学者急着写代码,却不知道 Python 到底能做什么、该按什么顺序学。如果方向错了,学得越久越容易放弃。
1.1 Python 是什么,能解决什么问题
用一句话概括:Python 是一门解释型、面向对象的通用编程语言。它的语法接近自然语言,缩进代替了大括号,变量不需要提前声明类型,所以非常适合作为第一门编程语言。
Python 能做的事情很多:
- Web 后端开发,比如用 Django、Flask 搭建网站和接口;
- 网络爬虫,用 requests、Scrapy 等库抓取网页数据;
- 数据分析与可视化,用 NumPy、pandas、matplotlib 处理表格和业务数据;
- 自动化办公,批量处理 Excel、Word、PDF 文件;
- 人工智能和机器学习,大量框架都以 Python 为入口。
对零基础的人来说,最合适的入门路径是先掌握 Python 基础语法,然后选择一个方向深入。爬虫和数据分析的组合是性价比很高的方向,因为这两个方向技术栈清晰、正反馈快,写几行代码就能看到结果。
1.2 入门阶段需要掌握的知识点
如果你希望在七天里完成 Python 零基础到入门,不建议死磕特别偏的知识点。优先级应该是:
- 变量与数据类型:字符串、整数、浮点数、布尔值;
- 流程控制:if 条件判断、for 循环、while 循环;
- 数据结构:列表、字典、元组、集合;
- 函数与模块:定义函数、参数传递、import 导入;
- 文件读写:open、with 语句、编码处理;
- 异常处理:try-except 的基本写法;
- 常用第三方库:requests、BeautifulSoup、pandas、matplotlib。
这里面最核心的不是背语法,而是理解程序执行的顺序。爬虫本质上是“请求网页→解析内容→保存数据”的流程,数据分析本质上是“读取数据→清洗数据→分析统计→可视化展示”的流程。把基础语法学扎实之后,这两条线都能很快接上。
1.3 七天学习计划如何拆解
“七天学完”不是让你一天学十个小时,而是把学习任务切成小块,每天只解决一类问题。下面是一个可以参考的排期:
| 天数 | 学习重点 | 动手产出 |
|---|---|---|
| 第1天 | 安装 Python、环境配置、print 和变量 | 写一个自我介绍脚本 |
| 第2天 | 条件判断、循环、列表与字典 | 写一个成绩等级判断程序 |
| 第3天 | 函数、模块、文件读写 | 写一个通讯录文件读写脚本 |
| 第4天 | 爬虫基础:requests + BeautifulSoup | 抓取一个网页的标题和链接 |
| 第5天 | 数据分析基础:NumPy + pandas | 读取 CSV 并完成简单统计 |
| 第6天 | 可视化:matplotlib | 把统计数据画成柱状图 |
| 第7天 | 综合实战:爬虫 + 数据分析 | 完成一个完整的小项目 |
这个计划的目的不是制造焦虑,而是让你快速接触“真实项目”。当你第 7 天能跑通一个完整项目时,再回头看前几天的语法,理解会完全不一样。
2. 环境准备:安装 Python 和编写工具
学习 Python 的第一道坎往往是环境安装。很多报错不是代码写错了,而是 Python 没有正确安装,或者安装时没有把路径配置好。
2.1 安装 Python 并配置 PATH
推荐从 Python 官网下载安装包,选择稳定版本即可,建议使用 Python 3.8 以上的版本。安装时有一个非常关键的选项:勾选“Add Python to PATH”。
如果忘记勾选,后续在命令行执行python会提示“不是内部或外部命令”。解决办法有两种:
- 重新运行安装包,选择 Modify,然后勾选 Add Python to PATH;
- 手动把 Python 安装目录和 Scripts 目录添加到系统环境变量 PATH 中。
安装完成后,打开命令行工具,输入下面两条命令验证:
python --version pip --version如果能看到类似Python 3.12.x和对应的 pip 版本信息,说明环境已经正常。如果没有输出,或者提示找不到命令,优先检查 PATH 配置。
2.2 选择 IDE:PyCharm 还是 VS Code
初学者经常在编辑器选择上花太多时间。其实写 Python 初期不需要复杂工具,系统自带的 IDLE 也能跑,只是调试体验一般。
常用的两种方案:
- PyCharm:JetBrains 出品的专业 Python IDE,有社区版可以免费使用。项目结构清晰,适合写爬虫、Web 项目和大型脚本。缺点是启动较慢,配置项多。
- VS Code:轻量级编辑器,通过安装 Python 扩展后也能获得代码补全、调试、运行功能。适合日常脚本和数据分析场景。
如果只是配合本文练习,建议先用 VS Code,或者干脆用 PyCharm Community 版。环境越简单,越能把注意力集中在 Python 本身。
2.3 运行第一个 Python 程序
新建一个hello.py文件,写入以下代码:
print("Hello, Python!")在命令行中运行:
python hello.py输出结果:
Hello, Python!这一步虽然简单,但能验证三件事:Python 已安装、PATH 配置正确、代码文件能够正常执行。后续所有爬虫和数据分析代码,都会建立在这个运行流程之上。
3. Python 基础语法快速上手
基础语法不需要学得面面俱到,但关键概念必须理解。下面用最小示例讲清楚最常用的几个部分。
3.1 变量、数据类型与输入输出
Python 是动态类型语言,变量不需要声明类型,直接赋值即可:
name = "小明" age = 18 score = 89.5 is_pass = True print(name) print(type(age)) print(type(score)) print(type(is_pass))输出结果中可以看到每个变量的类型。type()是 Python 内置函数,用来查看变量类型,新手调试时非常有用。
字符串拼接和格式化输出也是高频操作。Python 3.6 以后推荐使用 f-string:
name = "小明" age = 18 print(f"我叫{name},今年{age}岁")这种写法的优点是直观,变量放到大括号里,运行时会自动替换成对应的值。相比+拼接字符串,f-string 更不容易因为类型转换出错。
3.2 流程控制:条件判断与循环
条件判断用if-elif-else。看一个成绩等级判断的例子:
score = 85 if score >= 90: print("优秀") elif score >= 60: print("及格") else: print("不及格")循环最常用的是for循环。需要同时拿到下标和元素时,用enumerate:
scores = [78, 92, 85, 66, 99] for index, score in enumerate(scores, 1): print(f"第{index}门成绩:{score}")enumerate的第二个参数表示起始数字,这里设置为 1,方便人类阅读。列表推导式也是入门阶段值得掌握的写法,它能把循环和列表生成压成一行:
nums = [1, 2, 3, 4, 5] double_nums = [n * 2 for n in nums] print(double_nums)输出结果:
[2, 4, 6, 8, 10]3.3 函数、模块与文件读写
函数用于封装一段可复用的逻辑。定义函数用def关键字:
def add(a, b): return a + b result = add(3, 5) print(result)把函数写进独立文件,另一个文件用import导入,就形成了模块。项目变大后,模块化是必需品。
文件读写也是爬虫和数据分析的基础。推荐用with语句,它会自动处理文件关闭:
with open("demo.txt", "w", encoding="utf-8") as f: f.write("第一行\n") f.write("第二行\n") with open("demo.txt", "r", encoding="utf-8") as f: content = f.read() print(content)这里encoding="utf-8"非常重要。如果文件里有中文,不指定编码,不同操作系统下很容易出现UnicodeDecodeError或乱码。后续处理 CSV、Excel 文件时,编码问题是最常见的坑之一。
4. 爬虫入门:用 requests 和 BeautifulSoup 抓取网页
爬虫是 Python 最热门的方向之一。很多人听到“爬虫”就觉得很高端,其实它的核心流程只有三步:发送请求、解析响应、保存数据。
4.1 爬虫的工作流程与写爬虫前必须注意的事
一个普通的网页请求过程如下:
- 客户端向服务器发送 HTTP 请求;
- 服务器返回 HTML 或其他格式的数据;
- 爬虫从返回内容中提取需要的信息;
- 将数据保存到 CSV、Excel、数据库等存储介质。
在学习阶段,务必使用公开的练习网站,比如https://quotes.toscrape.com/,这是一个专门用来练习爬虫的站点。不要一开始就去爬电商平台、社交媒体等高反爬网站,更不要在未授权的情况下抓取个人隐私数据或商业敏感数据。爬虫需要遵守网站的 robots 协议,控制请求频率,避免对目标服务器造成压力。
4.2 requests 发送请求
requests 是 Python 最常用的 HTTP 请求库。先安装它:
pip install requests beautifulsoup4 lxml然后写一个最简单的请求示例:
import requests url = "https://quotes.toscrape.com/" resp = requests.get(url, timeout=10) print(resp.status_code) print(resp.text[:500])如果返回200,说明请求成功。resp.text是网页的 HTML 文本,截取前 500 个字符用来确认内容是否正确。
很多网站会识别没有浏览器标识的请求。如果返回403或内容异常,可以添加请求头,伪装成浏览器访问:
headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/120.0 Safari/537.36" } resp = requests.get(url, headers=headers, timeout=10)注意 User-Agent 字符串可以根据实际浏览器修改,关键是让服务器认为这是正常访问。
4.3 BeautifulSoup 解析 HTML
拿到 HTML 后,需要从标签中提取数据。BeautifulSoup 提供了方便的选择器方法。先用soup.select()选择 CSS 选择器匹配的元素,再用get_text()获取文本。
下面这段代码抓取练习网站首页的名言和作者:
from bs4 import BeautifulSoup soup = BeautifulSoup(resp.text, "html.parser") quote_items = soup.select(".quote") for quote in quote_items: text = quote.select_one(".text").get_text() author = quote.select_one(".author").get_text() print(text) print("作者:", author) print("---")select_one返回第一个匹配到的元素,select返回所有匹配到的元素列表。这里选择class="quote"的 div,然后在内部继续查找名言文本和作者。
4.4 数据保存到 CSV 文件
抓取到的数据最好保存到本地,方便后续分析。Python 标准库中的 csv 模块可以直接写 CSV 文件:
import csv rows = [ ["text", "author"], ["人生苦短,我用 Python", "小明"], ["保持简单,保持专注", "小红"], ] with open("quotes.csv", "w", newline="", encoding="utf-8") as f: writer = csv.writer(f) writer.writerows(rows)爬虫代码如果写成自动化脚本,建议加入请求延迟:
import time time.sleep(1)time.sleep(1)表示每次请求后停顿 1 秒,避免因为请求过快触发反爬,也是对目标网站的基本尊重。
4.5 三种常见爬虫类型:批量、增量、垂直
爬虫按照应用场景,常见的分类有三种:
- 批量型爬虫:一次性抓取大量数据,适合离线分析、数据备份。比如下载某个公开网站全部文章内容。
- 增量型爬虫:定期更新数据,只抓取新增或发生变化的内容,适合资讯监控、商品价格跟踪。
- 垂直型爬虫:只聚焦某一类特定数据,比如只爬电影信息、只爬职位信息、只爬图书信息,数据结构相对统一。
对初学者来说,先掌握批量型的单次抓取就够了。增量型和垂直型更多是工程化设计思路,后期需要维护队列、去重和定时任务时再深入。
5. 数据分析基础:NumPy、pandas 与可视化
数据分析是 Python 另一个高频方向。很多爬虫项目做完后,最终目的是对数据进行分析,所以爬虫和数据分析天然适合放在一起学习。
5.1 数据分析的标准流程
一次完整的数据分析通常包含:
- 明确问题:要知道自己在分析什么,比如“哪类商品销量最高”;
- 获取数据:通过爬虫、数据库、Excel 等方式获取原始数据;
- 数据清洗:处理缺失值、重复值、异常值、格式不一致;
- 分析建模:用统计方法或算法寻找规律;
- 可视化:通过图表辅助汇报;
- 得出结论:用数据和图表回答最开始的问题。
很多新手拿到数据后直接开始画图,这其实是不对的。数据没有清洗之前,画出来的图很可能是误导性的。
5.2 NumPy 数组:科学计算的基础
NumPy 的核心是ndarray,也就是多维数组。它比 Python 原生列表更高效,更适合数值计算。
安装数据分析相关库:
pip install numpy pandas matplotlib创建数组并计算:
import numpy as np arr = np.array([1, 2, 3, 4, 5]) print(arr) print("平均值:", arr.mean()) print("总和:", arr.sum()) print("最大值:", arr.max())NumPy 常用于生成模拟数据、矩阵运算和数组变换。在爬虫数据分析中,NumPy 通常不会直接出现太多次,但它是 pandas 的底层依赖,理解基本概念有助于后续学习。
5.3 pandas 核心数据结构:Series 和 DataFrame
pandas 是数据分析的核心库。它的两个核心结构是 Series 和 DataFrame:
- Series 是一维带标签数组,可以理解为一列数据;
- DataFrame 是二维表格结构,可以理解为 Excel 中的一张表。
创建 DataFrame 的简单示例:
import pandas as pd df = pd.DataFrame({ "姓名": ["张三", "李四", "王五"], "成绩": [88, 95, 79], "是否通过": [True, True, True] }) print(df) print("---") print(df.info()) print("---") print(df.describe())df.info()可以查看每列的数据类型和缺失情况,df.describe()能给出数值列的统计描述。这两个方法几乎是数据分析第一步必用的。
5.4 数据清洗常见操作
爬虫抓到的数据往往不够干净,常见问题包括缺失值、重复值、字符串带空格、数据类型不对等。
举一个简单的清洗示例:
df = pd.DataFrame({ "姓名": ["张三", "李四", "张三", None], "成绩": [88, "95", "79", 100] }) # 删除重复行 df.drop_duplicates(inplace=True) # 删除姓名为空的行 df.dropna(subset=["姓名"], inplace=True) # 将成绩统一转为数值,无法转换的变成 NaN df["成绩"] = pd.to_numeric(df["成绩"], errors="coerce") print(df)这里inplace=True表示直接修改原 DataFrame。errors="coerce"表示当字符串无法转换为数值时,不报错,而是填成 NaN。转换完成后可以再用dropna()处理掉无效数据。
5.5 matplotlib 绘制图表
matplotlib 是 Python 最常用的可视化库。下面用 pandas 的 Series 直接绘制柱状图:
import matplotlib.pyplot as plt import pandas as pd data = pd.Series({"Python": 88, "Java": 75, "Go": 90, "C++": 82}) data.plot(kind="bar") plt.show()如果希望在本地保存图片,可以调用:
plt.savefig("result.png", dpi=150)中文显示需要额外设置字体,否则图表的标题和坐标轴会变成方块。常见做法是:
plt.rcParams["font.sans-serif"] = ["SimHei", "Microsoft YaHei", "PingFang SC"] plt.rcParams["axes.unicode_minus"] = False如果你电脑里没有这些字体,也可以直接使用英文标签,避免中文显示问题。
6. 综合实战:抓取名言数据并完成统计分析
学完基础后,最好做一个综合项目把爬虫和数据分析串起来。下面是一个适合零基础入门的实战案例:抓取练习网站的名言数据,统计作者出现次数,并绘制柱状图。
6.1 项目需求与设计
项目目标:
- 爬取前 3 页的名言和作者;
- 保存到 CSV 文件;
- 用 pandas 读取 CSV;
- 统计每个作者出现的次数;
- 用柱状图展示出现次数最多的作者。
整个项目拆成两个文件:
spider.py:负责抓取数据并保存;analysis.py:负责读取数据并分析。
这样写的好处是逻辑分离,爬虫和分析可以独立修改。如果在实际项目中,爬虫跑完一次后数据已经落地,后续分析不再依赖网络。
6.2 编写爬虫代码
创建spider.py,写入以下代码:
import time import requests from bs4 import BeautifulSoup import pandas as pd base_url = "https://quotes.toscrape.com/page/{}/" all_quotes = [] for page in range(1, 4): url = base_url.format(page) print(f"正在抓取:{url}") resp = requests.get(url, timeout=10) if resp.status_code != 200: print(f"页面请求失败:{resp.status_code}") break soup = BeautifulSoup(resp.text, "html.parser") quote_items = soup.select(".quote") if not quote_items: break for item in quote_items: text = item.select_one(".text").get_text() author = item.select_one(".author").get_text() all_quotes.append({"text": text, "author": author}) time.sleep(1) df = pd.DataFrame(all_quotes) df.to_csv("quotes.csv", index=False, encoding="utf-8-sig") print(f"共抓取 {len(df)} 条数据")这里使用encoding="utf-8-sig"保存 CSV,可以有效避免 Excel 打开 CSV 时出现中文乱码。每抓完一页后休息 1 秒,防止请求太频繁。
运行脚本:
python spider.py正常情况下会看到抓取日志,并在当前目录生成quotes.csv。
6.3 数据清洗与统计
创建analysis.py,写入以下代码:
import pandas as pd import matplotlib.pyplot as plt df = pd.read_csv("quotes.csv", encoding="utf-8-sig") print("数据概览:") print(df.head()) print(f"数据总量:{len(df)}") print("缺失值情况:") print(df.isnull().sum()) # 删除重复值 df.drop_duplicates(inplace=True) # 统计作者出现次数 author_count = df["author"].value_counts().head(10) print("作者出现次数 TOP10:") print(author_count) # 设置中文字体 plt.rcParams["font.sans-serif"] = ["SimHei", "Microsoft YaHei", "PingFang SC"] plt.rcParams["axes.unicode_minus"] = False # 绘制柱状图 author_count.plot(kind="bar", figsize=(10, 6), color="#4C72B0") plt.title("作者出现次数 TOP10") plt.xlabel("作者") plt.ylabel("名言数量") plt.xticks(rotation=30) plt.tight_layout() plt.savefig("author_count.png", dpi=150) plt.show()value_counts()是 pandas 按值统计出现次数的常用方法,默认从高到低排序。head(10)取前 10 行,避免图表太拥挤。
运行脚本:
python analysis.py6.4 运行结果分析
如果网站结构没有变化,前三页大约能抓到 30 条左右的数据。统计结果会显示哪些作者被收录的名言数量更多。图表会保存到author_count.png。
这一套流程虽然简短,但已经把“爬虫采集→数据落盘→数据清洗→统计分析→可视化”全链路走通了。后续如果要扩展,可以把爬虫改成增量抓取,把分析改成生成日报,甚至接入数据库。
7. 常见问题排查手册
初学者写代码时,遇到报错是常态。下面整理几个出现频率最高的问题,可以直接对照排查。
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
pip 不是内部或外部命令 | 安装 Python 时未勾选 Add Python to PATH | 重新安装并勾选,或手动把 Scripts 目录加入 PATH |
ModuleNotFoundError: No module named 'requests' | 第三库未安装,或者安装到了其他 Python 环境 | 执行pip install requests,检查当前解释器路径 |
SSL: CERTIFICATE_VERIFY_FAILED | 本地证书或目标网站证书问题 | 更新证书;仅在测试时可临时设置verify=False |
UnicodeDecodeError | 文件编码与读取编码不一致 | 读写文件时显式指定encoding="utf-8" |
| 请求返回 403 | 服务器反爬,识别到非浏览器请求 | 添加 User-Agent、Cookie,控制访问频率 |
| 图表中文变成方块 | matplotlib 缺少中文字体配置 | 设置plt.rcParams["font.sans-serif"],或改用英文标签 |
| CSV 文件用 Excel 打开乱码 | 保存时没有使用 UTF-8 BOM | to_csv时设置encoding="utf-8-sig" |
如果你在执行pip install xxx时报错,可以优先使用python -m pip install xxx来安装。这个命令会明确指定当前 Python 环境对应的 pip,避免多版本 Python 互相干扰。
遇到报错时,不要直接复制整段报错去搜答案,先看最后一行,一般会提示文件名、行号和错误类型。比如NameError: name 'x' is not defined,说明某个变量没有定义,先检查拼写和赋值顺序。调试速度会快很多。
8. 学习建议与工程习惯
代码能跑通只是第一步。想让自己写的爬虫和数据分析项目更可靠,还需要养成几个工程习惯。
8.1 使用虚拟环境管理依赖
不要把所有 Python 依赖都安装到全局环境,否则不同项目之间很容易出现版本冲突。建议每个项目都创建独立虚拟环境:
python -m venv venvWindows 激活:
venv\Scripts\activateLinux / macOS 激活:
source venv/bin/activate安装依赖后,导出依赖清单:
pip freeze > requirements.txt别人拿到项目后,只需要执行pip install -r requirements.txt就能复现环境。这个习惯在团队协作和部署时尤其重要。
8.2 爬虫开发的合规边界与性能控制
爬虫不是“想爬就爬”。写爬虫之前,最好检查目标网站的robots.txt,确认哪些路径允许抓取。比如访问https://quotes.toscrape.com/robots.txt可以看到规定。
另外要注意:
- 设置请求头 User-Agent;
- 控制请求频率,不要并发过高;
- 只抓取公开数据,不碰账号密码、隐私信息;
- 数据仅用于学习和研究,不用于商业侵权;
- 如果网站明确禁止爬取,应当停止。
爬虫本质上是自动化请求工具,技术本身没有善恶,但使用方式决定了边界。职业发展和项目落地都更欢迎合规、稳健的写法。
8.3 让数据分析代码更规范
数据分析项目不是写完就结束,后续还要维护。建议在代码中写清数据来源、清洗规则和分析目标。
一个简单的规范示例:
""" 作者出现次数分析脚本 数据来源:spider.py 抓取到的 quotes.csv 清洗规则:删除重复数据,跳过缺失作者的行 分析目标:统计作者出现次数 TOP10 """这样即使过了三个月再回来看,也能快速理解脚本的意图。
函数拆分也很重要。清洗、统计、绘图最好分别封装成函数,而不是全部堆在脚本里。项目变大后,你才有能力把代码迁移到 airflow、定时任务或 Web 服务中。
8.4 下一步学习方向
基础语法、爬虫、数据分析都过了一遍之后,可以根据兴趣选择深入方向:
- 爬虫进阶:学习 Scrapy 框架、请求代理、登录模拟、异步爬虫;
- 数据分析进阶:学习 SQL、Excel 高阶处理、数据可视化仪表盘、FineReport 等工具;
- 自动化办公:用 openpyxl 批量处理 Excel,用 python-docx 生成 Word 报告;
- Web 后端:学习 Flask、FastAPI,把爬虫和数据分析能力封装成接口。
学到这里,你会发现 Python 的生态非常庞大。真正让你入门的不是“看完一套教程”,而是是否亲手跑通过项目。哪怕只是把本文的代码复制下来,修改几个字段,跑通一次完整流程,收获也会比只看不练大得多。
如果这篇文章对你有帮助,可以先收藏备用。尤其是环境配置和常见报错部分,等你真正开始写代码时,大概率会回来对照查一遍。动手写第一行代码,现在就是最好的时间。