机器学习入门:用爬虫数据训练第一个预测模型
大家好,我是老张,一个干了五年后端的老兵。这几年带过不少新人,也辅导过转行的朋友学编程。我注意到一个现象:很多人一听到“机器学习”就两眼发懵,觉得那是博士才能碰的东西。其实不是!今天我就带你用最接地气的方式,从零开始跑通你的第一个机器学习项目——而且还会用到爬虫来获取真实数据。
我当初学的时候,也是被一堆数学公式吓退过。后来发现,先跑起来,再理解原理,才是最适合初学者的路径。
为什么我们要学机器学习?
简单说,机器学习就是让计算机从数据中自动找出规律,并用这个规律做预测或决策。
比如:
- 电商平台根据你浏览的商品推荐类似商品(推荐算法)
- 银行判断一笔交易是不是诈骗(分类算法)
- 天气App预测明天会不会下雨(回归算法)
而实现这些功能的核心,就是算法——一套告诉计算机“怎么从数据里学东西”的步骤。
环境准备:5分钟搭好开发环境
我们用 Python,因为它有最成熟的机器学习生态。你需要安装以下工具:
- Python 3.8+(去 python.org 下载)
- pip(Python 自带,不用单独装)
- 安装三个关键库:
pip install requests beautifulsoup4 scikit-learn pandas
| 库名 | 作用 |
|---|---|
requests |
发送网络请求(用于爬虫) |
beautifulsoup4 |
解析网页内容(爬虫必备) |
scikit-learn |
最流行的机器学习库(包含各种算法) |
pandas |
处理表格数据(清洗、整理数据) |
💡 提示:如果你用的是 Windows,建议安装 Anaconda,它自带所有科学计算库,省去配置烦恼。
核心概念:三句话搞懂机器学习
1. 数据是燃料,算法是引擎
没有数据,再牛的算法也跑不动。所以我们第一步要获取数据——这里就用到爬虫。
2. 训练 vs 预测
- 训练(Training):把历史数据喂给算法,让它“学习”规律。
- 预测(Prediction):用学好的模型对新数据做判断。
3. 监督学习是最常见的入门类型
我们提供“带答案的数据”(比如:房子面积=80㎡,价格=300万),让算法学会从输入(面积)预测输出(价格)。这种叫监督学习。
实战项目:用房价数据训练一个预测模型
我们将完成一个小项目:爬取简单的房价数据 → 训练模型 → 预测新房子的价格。
注意:为简化流程,我们不爬真实网站(可能被封IP),而是模拟一个小型数据集。但代码结构和真实爬虫一致!
第一步:用爬虫“模拟”获取数据
假设我们有一个本地 HTML 文件 houses.html,内容如下:
<div class="house">
<span class="area">60</span>
<span class="price">200</span>
</div>
<div class="house">
<span class="area">80</span>
<span class="price">300</span>
</div>
<!-- 更多房子... -->
写一个爬虫提取面积和价格:
# crawler.py
from bs4 import BeautifulSoup
# 模拟网页内容(实际中你会用 requests.get(url) 获取)
html = """
<div class="house"><span class="area">60</span><span class="price">200</span></div>
<div class="house"><span class="area">80</span><span class="price">300</span></div>
<div class="house"><span class="area">100</span><span class="price">400</span></div>
<div class="house"><span class="area">120</span><span class="price">500</span></div>
"""
soup = BeautifulSoup(html, 'html.parser')
areas = []
prices = []
for house in soup.find_all('div', class_='house'):
area = int(house.find('span', class_='area').text)
price = int(house.find('span', class_='price').text)
areas.append(area)
prices.append(price)
print("面积:", areas)
print("价格:", prices)
运行结果:
面积: [60, 80, 100, 120]
价格: [200, 300, 400, 500]
✅ 看!我们用爬虫成功拿到了结构化数据。这一步在真实项目中可能是从链家、安居客等网站抓取(记得遵守 robots.txt 和法律!)。
第二步:用 scikit-learn 训练模型
现在我们有数据了,下一步是训练。
# train.py
from sklearn.linear_model import LinearRegression
import numpy as np
# 把数据转成模型需要的格式
X = np.array(areas).reshape(-1, 1) # 特征:面积(必须是二维数组)
y = np.array(prices) # 标签:价格
# 创建线性回归模型(一种最简单的机器学习算法)
model = LinearRegression()
# 训练模型
model.fit(X, y)
print("模型训练完成!")
print(f"斜率(每平米价格): {model.coef_[0]:.2f} 万元")
print(f"截距: {model.intercept_:.2f} 万元")
输出:
模型训练完成!
斜率(每平米价格): 5.00 万元
截距: -100.00 万元
🧠 小知识:线性回归假设房价 = 面积 × 单价 + 固定成本。这里模型学到:单价≈5万/㎡,还有个-100万的“基础折扣”(可能是税费或其他因素)。
第三步:用模型预测新房子价格
# predict.py
new_area = [[90]] # 注意:必须是二维列表!
predicted_price = model.predict(new_area)
print(f"预测 90㎡ 房子的价格: {predicted_price[0]:.0f} 万元")
输出:
预测 90㎡ 房子的价格: 350 万元
完美!我们从爬虫获取数据 → 训练算法 → 做出预测,走通了完整流程。
新手常见问题解答
❓Q1:我爬真实网站会被封吗?
会!所以务必:
- 先看网站
robots.txt(如https://example.com/robots.txt) - 控制请求频率(加
time.sleep(1)) - 使用合法公开数据集(如 Kaggle、UCI)练习更安全
❓Q2:为什么我的模型预测不准?
可能原因:
- 数据太少(我们只有4条)
- 特征太单一(只用了面积,没考虑地段、楼层等)
- 模型太简单(线性回归只能拟合直线关系)
✅ 建议:初学时先接受“不完美”,重点理解流程。
❓Q3:scikit-learn 是什么?还有别的库吗?
scikit-learn:适合传统机器学习(如分类、回归)TensorFlow/PyTorch:适合深度学习(图像、语音等)- 初学者先精通 scikit-learn,再进阶。
学习路线建议:下一步该学什么?
- 巩固 Python 基础:尤其是列表、字典、函数
- 学习 pandas:处理真实数据(CSV、Excel)比爬虫更常用
- 尝试更多算法:
- K近邻(KNN):最简单的分类算法
- 决策树:可解释性强,适合业务场景
- 玩转公开数据集:
- 泰坦尼克号生存预测(分类)
- 波士顿房价(回归)
- 理解评估指标:准确率、均方误差(MSE)等
⚠️ 避坑指南:不要一上来就啃《统计学习方法》!先动手做项目,遇到问题再查理论,效率更高。
结语:你已经迈出了第一步
看到这里,你已经完成了:
- ✅ 用爬虫提取结构化数据
- ✅ 用算法(线性回归)训练模型
- ✅ 对新数据做出预测
这看似简单,但背后是完整的机器学习 pipeline。我当初第一次跑通这样的代码时,兴奋得差点把咖啡打翻——因为终于明白:机器学习不是魔法,而是一套可拆解、可复现的工程流程。
接下来,你可以:
- 把数据量扩大到100条
- 加入“房间数”作为第二个特征
- 尝试用 KNN 预测房价区间
记住:每个专家,都曾是连 pip 都装不明白的新手。坚持动手,你也能行!
老张寄语:技术路上,不怕慢,就怕停。有问题欢迎留言交流!

评论 0