Python入门实战:7天掌握爬虫与数据分析核心技能
零基础学 Python,最常踩的坑不是语法难,而是学完语法之后不知道该做什么。变量、循环、函数都认识了,面对真实任务还是无从下手。以爬虫和数据分析为主线来学 Python,路径会清楚很多:先用 requests 抓取网页数据,再用 Pandas 完成清洗和分析,最后用图表呈现结论。这条路线正好覆盖 Python 入门阶段最常用、最容易看到成果的技术栈,也是很多转行数据分析、自动化办公和编程开发的人选择的第一条实践路径。
本文按七天学习计划组织,每天需要 2 到 3 小时连续投入,目标是建立起一条完整技能链路。读完并跟着敲完代码之后,你能独立完成“从网页获取公开数据、清洗数据、分析规律、输出可视化和结论”这样的完整小项目,也为后续深入学习 Scrapy、NumPy、Pandas 高级用法和机器学习打基础。需要说明的是,七天能做到的是入门和基础实战,真正熟练和精通仍然依赖后续项目积累。
1. 为什么以爬虫和数据分析作为 Python 入门的双重主线
1.1 Python 基础最容易出现“学完就忘”
很多初学者习惯按教材顺序学习:变量、字符串、列表、字典、循环、函数。每个知识点单独看都不难,但缺少一条粘合线,学完后不知道这些语法能组合成什么。爬虫和数据分析刚好能解决这个问题。
爬虫需要把字符串、正则、字典、循环、函数、文件读写串联起来,缺一个环节代码就跑不通。数据分析需要把列表、字典、NumPy 数组、Pandas DataFrame 串联起来,数据清洗中还要频繁处理类型转换和缺失值。以这两个方向为学习主线,语法知识会不断被重复使用,记忆效率比单纯刷语法题高得多。
1.2 七天学习计划总览
整套路线的核心目标是“能用 Python 处理真实数据”。每一天围绕一个可验证的阶段成果展开:
| 天数 | 主题 | 核心内容 | 阶段产出 |
|---|---|---|---|
| 第 1 天 | Python 环境和语法基础 | 安装、变量、字符串、条件、循环 | 能运行一段包含循环和判断的脚本 |
| 第 2 天 | 数据结构、函数和文件操作 | 列表、字典、函数、异常、文件读写 | 能读取文本文件并完成简单统计 |
| 第 3 天 | 网络请求和页面解析 | requests、HTTP 原理、BeautifulSoup | 能抓取一个公开网页的标题和链接 |
| 第 4 天 | 数据落地和爬虫工程化 | CSV、Excel 保存、请求控制、增量更新 | 能稳定抓取数据并保存为表格 |
| 第 5 天 | NumPy 和 Pandas 入门 | 数组、Series、DataFrame、缺失值 | 能对一批表格数据做清洗 |
| 第 6 天 | 分组聚合与可视化 | 筛选、分组、聚合、Matplotlib | 能输出统计图表和结论 |
| 第 7 天 | 综合实战 | 从数据获取到可视化的完整项目 | 完成一个可复用的数据分析小项目 |
这个计划不要求每个知识点都深挖。第 1 天到第 2 天所有语法只要做到“看得懂、能改、能跑”,第 3 天开始通过应用反哺基础,比看完所有语法再动手更有效。
1.3 工具选型:先统一,再扩展
学习阶段建议使用一套最简单、跨平台一致的工具组合:
- Python 3.10 或更高版本。
- VS Code 配合 Python 扩展。
- 系统自带终端或 VS Code 集成终端。
- 浏览器开发者工具用于查看网页结构。
- venv 虚拟环境隔离项目依赖。
Windows 用户在安装 Python 时勾选“Add Python to PATH”,可以避免后续命令行找不到 python 命令。macOS 和 Linux 用户通常自带 Python,但版本可能偏旧,建议先通过官网安装新版,再用 python --version 确认。
注意:学习环境最重要的是可复现。如果连解释器版本都不能确认,后续 requests、Pandas 等依赖的安装报错会很难判断原因。
2. 第一天到第二天:Python 语法基础要练到什么程度
2.1 Python 安装与 VS Code 环境配置
安装完成后,打开终端执行版本检查:
Windows 如果安装的是 Python Launcher,也可以使用:
VS Code 中安装 Python 扩展后,按 Ctrl+Shift+P(Windows)或 Cmd+Shift+P(macOS),输入 Python: Select Interpreter,选择刚安装的解释器,这一步决定了运行代码时用的是哪个 Python 环境。
创建第一个脚本文件 hello.py:
在 VS Code 中直接运行,输出 Hello, Python,环境就通了。
2.2 核心语法模块:对象、判断、循环和函数
入门阶段不需要背全部语法,但下面这些必须熟练:
- 变量和类型:
int、float、str、bool、None。 - 条件判断:
if、elif、else。 - 循环:
for配合range、enumerate,以及while。 - 函数:定义参数、返回值、默认参数。
- 异常:
try、except、finally。
一个综合示例:
这个示例把判断、循环、函数、异常全部串了起来。后面写爬虫时,对单条数据解析的错误处理思路和这里完全一致。
2.3 四种常用数据结构
| 结构 | 特点 | 常见场景 |
|---|---|---|
| 列表 list | 有序、可重复、可修改 | 保存抓取到的一组商品标题 |
| 字典 dict | 键值映射、查询快 | 保存单条数据的完整字段 |
| 元组 tuple | 有序、不可修改 | 保存坐标、固定配置项 |
| 集合 set | 无序、去重 | 对 URL 或文本去重 |
爬虫和数据分析中使用频率最高的是列表和字典。一个典型的数据结构是列表套字典:
后面转成 Pandas DataFrame 时,这种结构可以直接使用。
2.4 文件读写和异常处理
数据采集后最终要落盘。先掌握最常用的文本和 JSON 读写:
写入中文时必须设置 encoding="utf-8",否则在不同操作系统上可能出现乱码。ensure_ascii=False 让 JSON 文件保存中文而不是 \u 转义序列。
2.5 基础阶段的常见坑
第一个坑是分不清交互模式与脚本模式。在 Python 交互环境里运行 python 后直接敲代码,和在脚本文件里写代码再运行是两种方式。交互模式适合试验单行代码,脚本模式适合完整执行。很多初学者在交互环境里定义了变量,重新运行脚本后变量不存在,于是误以为代码写错。
第二个坑是缩进错误。Python 用缩进表示代码块,混用 Tab 和空格会导致 IndentationError。VS Code 默认会显示缩进问题,建议保持 4 个空格,并让编辑器把 Tab 自动转换为空格。
第三个坑是直接修改正在遍历的列表。比如在循环中删除元素,会导致索引错位。推荐先筛选出需要的元素,再生成新列表,而不是原地删除。
3. 第三天到第四天:requests 爬虫与合规数据采集
3.1 网络请求原理先于代码
写爬虫前要先理解一次 HTTP 请求包含什么。最简单的理解是:客户端向服务器发送一个请求,服务器返回一个响应。爬虫的本质就是由代码代替人完成这个请求和解析过程。
需要关心的部分包括:
- URL:请求地址,包含协议、域名、路径、查询参数。
- 请求方法:
GET用于获取数据,POST用于提交数据。 - 请求头:
User-Agent、Accept、Cookie等。 - 响应状态码:
200正常,404不存在,403禁止访问,500服务器错误。 - 响应体:HTML、JSON、文本或二进制内容。
入门阶段优先练习 GET 请求,因为大部分公开信息页面和数据接口都支持这种方式。先学会查看浏览器开发者工具中的 Network 面板,能极大减少代码调试成本。
3.2 requests 最小闭环
安装第三方库:
一个最小请求示例:
timeout=10 表示超过 10 秒未响应就抛出异常,避免程序长时间卡住。正式场景中通常还要设置 headers:
| requests 参数 | 作用 | 错误使用时的表现 |
|---|---|---|
timeout |
设置连接和读取超时时间 | 不设置时可能长时间阻塞 |
headers |
携带 User-Agent、Referer 等请求头 | 部分站点拒绝访问或返回异常页面 |
params |
自动拼接 URL 查询参数 | 手动拼串容易遗漏编码 |
verify |
是否校验 HTTPS 证书 | 目标证书异常时抛出 SSLError |
3.3 页面解析:正则、BeautifulSoup 和 XPath
拿到 HTML 后需要提取目标数据。三种常用方式各有适用场景:
- 正则表达式:适合从字符串中提取固定模式的片段,比如日期、手机号、邮箱。
- BeautifulSoup:适合解析规范程度一般的 HTML,用标签和属性定位节点。
- XPath:适合复杂嵌套结构,lxml 的解析速度和定位表达力更强。
一个 BeautifulSoup 示例:
这里设置 response.encoding = response.apparent_encoding 是为了避免中文乱码。html.parser 是 Python 自带解析器,依赖最少;如果遇到复杂解析性能问题,可以换成 lxml。
3.4 数据落地:CSV 和 Excel
抓取的数据只有落盘才能进一步分析。最常用的是 CSV 和 Excel 两种格式。
写入 CSV:
使用 encoding="utf-8-sig" 是因为 Excel 打开 UTF-8 编码的 CSV 时容易乱码,utf-8-sig 会写入 BOM,Excel 可以正确识别。
写入 Excel:
如果只是保存结果,用 CSV 就足够;如果需要带格式、多个 Sheet 或后续人工编辑,Excel 更合适。
3.5 批量型、增量型、垂直型爬虫的应用场景
按抓取策略,可以把爬虫分成三类,学习阶段要理解它们的差异:
| 类型 | 特征 | 典型场景 | 工程重点 |
|---|---|---|---|
| 批量型爬虫 | 一次性抓取大量历史数据 | 初始建库、全量同步 | 并发控制、失败重试、断点续抓 |
| 增量型爬虫 | 只抓取新增或变更的数据 | 每日新闻、价格监控 | 去重、时间戳记录、定时调度 |
| 垂直型爬虫 | 只抓特定领域、特定字段 | 商品价格、招聘信息 | 字段抽取准确率、模板配置化 |
入门阶段先用批量型练手,把抓取逻辑跑通;第二步升级为增量型,重点解决“如何不重复抓取”;最后再考虑垂直型,把字段解析抽成独立模块。
3.6 爬虫的合规边界与请求节奏
这部分必须当成技术的一部分来学。可以做合规练习的数据来源包括:
- 提供开放 API 的公开数据平台。
- 网站明确允许爬虫抓取的页面,比如部分政府开放数据、技术文档站点。
- 自己搭建或本地部署的测试服务器数据。
不建议对商业平台做批量抓取,更不要尝试绕过登录、验证码、频率限制、登录态校验等反爬机制。抓取个人隐私数据、未授权内容、付费内容等行为可能违反相关法律法规和平台服务条款。
另一个关键点是请求节奏。下面的写法体现了最基本的带宽和频率控制:
在循环中加 time.sleep(2),把请求间隔控制在合理范围,这是最基础的礼貌。更规范的做法还包括:设置请求重试、日志记录、抓取前后对比数据量变化、定期检查目标站点是否更新了 robots.txt 或服务条款。
注意:学习爬虫时,用
https://httpbin.org、https://example.com等专门用于测试的站点练习,可以避免给真实网站造成压力。
4. 第五天到第六天:NumPy、Pandas 与数据可视化
4.1 NumPy 数组解决什么问题
Python 原生列表执行数值计算时效率低,而且缺少矩阵运算能力。NumPy 数组 ndarray 要求元素类型一致,支持向量化运算,很多数值计算的性能瓶颈在改用数组后能得到明显改善。
axis=0 表示沿行的方向计算,也就是按列计算;axis=1 表示沿列的方向计算,也就是按行计算。这个参数在 Pandas 中同样常见,是很多初学者混乱的来源。
4.2 Pandas 数据清洗
安装:
读取 Excel 后进行基础清洗:
清洗通常分为三步:
drop_duplicates 删除重复行。pd.to_numeric 把文本型数字转为数值,errors="coerce" 表示转换失败的变成 NaN。dropna(subset=["amount"]) 删除关键字段为空的行。fillna 对非关键字段填充默认值。
清洗之后要再确认一次数据质量:
isnull() 统计缺失值,describe() 查看数值型字段的分布。这一步能发现字段是否全部转换成功。
4.3 筛选、分组与聚合
数据清洗完成后,进入分析阶段。常见的操作有按条件筛选、按类别分组、聚合计算。
df[df["amount"] > 1000] 这种写法先得到一个布尔 Series,再用它作为索引,筛选出满足条件的行。groupby("category") 按分类聚合,agg 指定同时计算多个统计值。
多个条件组合时,需要用 & 而不是 and:
这是一个典型错误点。Pandas 中 and 不能直接用于条件组合,因为布尔 Series 需要逐个元素判断,而 & 才执行逐元素位运算。
4.4 Matplotlib 可视化
可视化不是分析的最终结果,而是辅助发现规律的手段。最常见的图表包括柱状图、折线图和直方图。
如果是在中文环境显示,还需要解决中文字体问题:
第一行指定中文字体,第二行解决负号显示为方块的问题。不同操作系统要换成自己已有的字体名称,比如 Windows 常见 SimHei,macOS 常见 PingFang SC。
4.5 用 Excel 辅助校验分析结果
学习数据分析时,Excel 是很好的校验工具。同样的数据,先到 Excel 里用透视表算一遍,再用 Pandas 跑一遍,两边结果一致,能确认自己的代码逻辑没有理解偏差。
也可以直接在 Python 里读取 Excel 公式生成的结果,做交叉对比:
Pandas 的 pivot_table 和 Excel 透视表是对应关系。掌握这个对应关系后,分析思路可以复用,不会因为工具切换而重新学习。
5. 第七天:综合实战怎么做才不算白做
5.1 选题原则
综合实战项目要满足三个条件:数据源公开、请求量可控、结果可验证。
可选方向包括:
- 抓取某公开 API 的天气历史数据,分析温度变化趋势。
- 使用公开图书数据接口,统计分类数量分布。
- 分析自己生成的 Excel 销售记录,找出金额最高的分类和增长趋势。
- 读取政府开放数据平台下载的公开数据集,做城市对比分析。
不要一上来就选需要复杂反爬、登录或验证的项目。综合实战的目标是把前面七天的知识串成一条线,而不是挑战反爬技术。
5.2 需求拆解与项目结构
一个完整项目至少包含四个阶段:数据获取、数据清洗、分析计算、结果输出。目录结构可以是:
main.py 负责调度流程,crawler.py 负责请求和解析,analysis.py 负责清洗和分析,data/raw 保存原始数据,data/output 保存分析结果。这样拆分会比把所有代码写在一个脚本里好维护得多。
5.3 数据获取、清洗、分析、可视化闭环
一个最小闭环的伪代码流程:
实际落地时,每个函数内部都要有检查点:
fetch_data返回后检查记录数是否大于 0。- 保存原始数据后,用文件大小或行数确认写入成功。
- 清洗后检查缺失值和数据类型。
- 分析后把关键指标打印出来,人工核对是否符合常识。
5.4 结果验证与复盘清单
项目做完后,用清单检查是必要的:
- 原始数据保存了吗?数量和来源能追溯吗?
- 清洗规则是否在代码中注释清楚?
- 分析结果能不能用 Excel 复算一遍?
- 图表标题、坐标轴、单位是否完整?
- 代码是否能在另一台电脑上按顺序跑通?
除此之外,还要记录过程中遇到的问题和解决方式。这份记录比代码本身更能体现学习深度,也是以后做真实项目时的排错索引。
6. 七天学习中高频问题的排查清单
6.1 Python 安装与模块导入问题
| 问题现象 | 常见原因 | 检查方式 | 处理建议 |
|---|---|---|---|
| 终端输入 python 提示找不到命令 | Python 未加入 PATH | 执行 where python 或 which python |
Windows 重新安装并勾选 Add Python to PATH |
| 代码报 ModuleNotFoundError | 第三方库未安装,或安装到了别的 Python 环境 | pip list 查看已安装包,VSCode 中检查解释器路径 |
执行 pip install requests,并确认解释器是同一版本 |
| pip 下载慢或超时 | 网络访问默认源不稳定 | 观察错误信息中的超时提示 | 使用国内镜像源,如 pip install -i 指定镜像 |
判断环境问题时,先确认当前哪个解释器生效:
这一步能快速判断 VS Code 的 Python 解释器和命令行是不是同一个。很多“代码在这里能跑,那里不能跑”的问题,根因都在多 Python 环境并存。
6.2 requests 请求异常
| 异常信息 | 常见原因 | 处理方式 |
|---|---|---|
ConnectTimeout |
目标服务器响应慢,或网络不通 | 增大 timeout,或确认网络状态 |
SSLError |
HTTPS 证书问题 | 先确认目标站点证书是否正常,不要直接关闭校验 |
HTTP 403 |
服务器拒绝请求 | 检查 User-Agent、请求频率、登录状态 |
HTTP 404 |
路径错误或页面结构变更 | 到浏览器开发者工具中确认实际请求地址 |
403 不是代码错误,而是服务器策略拒绝,最常见的处理是先确认自己有没有遵守站点的访问规则。不要为了绕过 403 去伪造复杂的请求头或模拟登录,学习阶段换一个允许访问的公开数据源更合适。
6.3 解析结果为空或乱码
解析结果为空,优先检查两步:
- 页面结构是否和代码假设一致。用
print(response.text[:500])看返回内容,而不是凭记忆判断。 - 目标数据是否通过接口异步加载。HTML 里没有数据时,要到开发者工具 Network 面板找 XHR 请求。
乱码问题通常是编码识别错误。优先使用:
也可以显式指定:
6.4 Pandas 读数据与筛选报错
| 问题现象 | 常见原因 | 处理建议 |
|---|---|---|
KeyError |
列名不存在或大小写不一致 | 先执行 df.columns 查看实际列名 |
ValueError 类型转换失败 |
数据中存在无法转换的文本 | to_numeric 加 errors="coerce",再删除或填充 NaN |
UnicodeDecodeError |
读取 CSV 编码不对 | read_csv 指定 encoding="utf-8" 或 "gbk" |
| 日期列变成字符串 | 没有做时间类型转换 | 使用 pd.to_datetime 转换后再操作 |
遇到 Pandas 报错时,一个通用套路是:先打印 df.info() 查看类型和缺失值,再打印 df.head() 查看具体数据,最后再调整代码。直接看报错往往容易忽略数据本身的问题。
7. 学习环境与生产环境的边界
7.1 学习阶段可以简化什么
学习阶段要尽快跑通完整链路,可以简化以下内容:
- 不引入复杂框架,数据抓取只用 requests。
- 不立刻学习并发和异步,先用单线程把逻辑跑通。
- 不写冗长的日志,先用
print或简单文件记录关键节点。 - 不追求代码优雅,先把每个模块的功能实现,再重构。
这些简化是为了减少学习阻力。等建立了正确心智,再逐步补工程能力。
7.2 生产环境必须补什么
进入生产环境后,学习阶段的简化项需要补齐:
- 配置外置化:URL、路径、并发数、请求间隔不应写死,应放在配置文件或环境变量中。
- 日志和监控:每次请求、每个异常都要有结构化日志,便于事后排查。
- 重试和降级:网络请求可能失败,需要设置重试次数和 fallback 逻辑。
- 限速和去重:控制请求频率,维护已处理数据的指纹或 ID,避免重复抓取。
- 数据备份:采集和清洗结果要有定时备份。
- 权限控制:数据库账号、下载任务、服务器部署都需要最小权限原则。
- 回滚方案:如果分析或采集逻辑出问题,要能快速切回上一版本数据。
7.3 代码与数据的管理习惯
从第一天开始就养成使用虚拟环境和依赖清单的习惯:
再小也要记住四个原则:
- 原始抓取数据和分析结果分开存放。
- 不在代码中提交数据库密码、Token、个人隐私数据。
- 每次改动用 Git 记录,commit 信息写清楚做了什么。
- 代码里加必要注释,注释说明“为什么”而不是“是什么”。
这些习惯短期内看不出价值,但在项目和项目之间不断迁移时,会明显降低重复踩坑的成本。
8. 学完之后往哪个方向扩展
8.1 把“跑通”提升为“工程化”
七天计划结束后,真正的成长刚刚开始。建议先用同一套数据把流程重写三遍:
- 第一遍是完整跑通,不追求规范。
- 第二遍把重复代码封装成函数,添加异常处理和日志。
- 第三遍把配置外置,尝试增加断点续抓或增量更新。
每次重构都要重新验证结果,确认改进没有破坏数据准确性。这样练习比每天学新库更有价值。
8.2 常见错误写法与推荐写法
| 错误写法 | 问题 | 推荐写法 |
|---|---|---|
except: 不指定异常类型 |
吞掉所有异常,难以定位 | except requests.RequestException as exc: |
| 爬虫循环不加间隔 | 给目标站点造成压力,可能被限制 | 每次请求后 time.sleep(2) |
| 用 Excel 打开 CSV 后直接保存成另类编码 | 中文乱码或编码混乱 | 用 utf-8-sig 写出 CSV |
Pandas 筛选用 and |
报错或结果不符合预期 | 用 &,且条件要用括号包起来 |
| 每次运行都重复抓取全部数据 | 资源浪费 | 先检查本地已有数据,做增量更新 |
8.3 下一步学习路线
完成七天学习后,可以按兴趣选择方向:
- 数据采集方向:学习 Scrapy 框架、WebSocket 数据获取、API 签名逻辑、爬虫调度系统。
- 数据分析方向:学习 Pandas 高级聚合、时间序列分析、SQL 查询、真实业务指标体系搭建。
- 数据可视化方向:学习 Plotly、PyECharts、DBeaver 等工具的图表设计,重点是把结论表达清楚。
- 数据工程方向:学习 Airflow 调度、数据仓库建模、Spark 数据分析、离线任务自动化。
- 自动化办公方向:继续用 Python 处理 Excel、Word、PDF,结合定时任务做报表自动生成。
无论选哪条路,核心不是会调接口,而是能理解数据从哪里来、怎么保证质量、怎么让结果可信。这也是爬虫和数据分析两条线合在一起学习的真正价值:既能获取数据,又能解释数据,才算是把 Python 用了起来。
七天时间能换来什么,取决于每天是否真的动手敲代码。遇到报错不要急于跳过,先读异常信息,再看数据内容,最后查对应库的文档。保持这个流程,爬虫和数据分析会成为你使用 Python 最熟练的两个方向。