技术探索与实践最佳实践:从零开始用 Python 写一个后端爬虫项目
大家好,我是你们的老朋友,一名在大厂干了三年后端开发的工程师,业余时间也在 B 站做技术 UP 主。最近收到不少私信,问我:“完全没接触过编程,怎么入门?能不能教我一个既有后端又带爬虫的小项目?”
其实我当初学的时候也是一头雾水——看到“后端”“爬虫”这些词就犯怵,以为要懂很多高深的东西。但后来发现,只要拆解清楚、动手做一遍,其实没那么难。所以今天这篇教程,就是专门写给零基础小白的,手把手带你用 Python 完成一个既能抓数据(爬虫),又能提供接口(后端) 的小项目。
💡 为什么选这个组合?
因为它能让你一次性理解两个核心概念:如何获取数据(爬虫) + 如何对外提供服务(后端)。这是很多实际项目的起点!
一、我们要做什么?
我们做一个简单的“天气查询服务”:
- 爬虫部分:从公开网站(比如中国天气网)抓取某个城市的实时天气。
- 后端部分:用 Flask(一个轻量级 Python 后端框架)搭建一个 Web 接口,别人访问
http://localhost:5000/weather?city=北京就能拿到 JSON 格式的天气数据。
是不是听起来很酷?别担心,代码我都给你写好了,你只需要跟着一步步敲。
二、环境准备:5 分钟搞定开发环境
你需要安装什么?
| 工具 | 作用 | 安装方式 |
|---|---|---|
| Python 3.8+ | 编程语言运行环境 | 官网下载 python.org |
| pip | Python 包管理工具 | 安装 Python 时自动包含 |
| VS Code(或任意编辑器) | 写代码的工具 | 官网下载即可 |
安装依赖库
打开终端(Mac/Linux 用 Terminal,Windows 用 CMD 或 PowerShell),执行以下命令:
# 创建项目文件夹
mkdir weather-service && cd weather-service
# 安装所需库
pip install flask requests beautifulsoup4
flask:用来写后端 APIrequests:用来发 HTTP 请求(模拟浏览器访问网页)beautifulsoup4:用来解析网页内容(像“筛子”一样把我们需要的数据捞出来)
✅ 验证是否安装成功:
在终端输入python,然后依次输入:import flask, requests, bs4 print("All good!")如果没报错,说明环境 OK!
三、核心概念:用大白话讲清楚“后端”和“爬虫”
什么是后端?
你可以把后端想象成“餐厅的厨房”:
- 用户(前端/手机 App)点菜(发送请求)
- 厨房(后端)做菜(处理逻辑、查数据库、调爬虫等)
- 做好后把菜端出去(返回 JSON 数据)
我们的 Flask 项目就是一个“微型厨房”,只负责一件事:根据城市名返回天气。
什么是爬虫?
爬虫就像“信息搬运工”:
- 模拟人打开浏览器 → 访问网址(比如
http://www.weather.com.cn/weather1d/101010100.shtml) - 把整个网页“拿下来”
- 从中找出我们需要的部分(比如“北京 25°C 晴”)
- 整理成结构化数据(比如
{"city": "北京", "temp": "25°C", "weather": "晴"})
⚠️ 注意:爬虫要遵守网站的 robots.txt 规则,不要频繁请求,更不能用于商业用途!我们这里仅用于学习。
四、实战项目:一步步写出你的第一个后端+爬虫项目
步骤 1:先写爬虫函数
创建文件 crawler.py,内容如下:
# crawler.py
import requests
from bs4 import BeautifulSoup
def get_weather(city_name):
# 简化版:我们用一个模拟数据代替真实爬取(避免反爬问题)
# 实际项目中你会在这里解析真实网页
mock_data = {
"北京": {"temp": "25°C", "weather": "晴"},
"上海": {"temp": "28°C", "weather": "多云"},
"广州": {"temp": "32°C", "weather": "雷阵雨"},
}
if city_name in mock_data:
return {
"city": city_name,
"temp": mock_data[city_name]["temp"],
"weather": mock_data[city_name]["weather"]
}
else:
return {"error": "城市未找到"}
📌 为什么用模拟数据?
真实网站有反爬机制(比如验证码、IP 限制),新手容易卡住。先掌握流程,后面再升级!
步骤 2:写后端 API
创建文件 app.py:
# app.py
from flask import Flask, request, jsonify
from crawler import get_weather
app = Flask(__name__)
@app.route('/weather')
def weather_api():
city = request.args.get('city', '') # 从 URL 参数获取 city
if not city:
return jsonify({"error": "请提供城市名,例如:?city=北京"}), 400
result = get_weather(city)
return jsonify(result)
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=5000)
步骤 3:运行项目
在终端执行:
python app.py
你会看到类似输出:
* Running on http://127.0.0.1:5000
步骤 4:测试接口
打开浏览器,访问:
http://localhost:5000/weather?city=北京
你应该看到:
{
"city": "北京",
"temp": "25°C",
"weather": "晴"
}
✅ 恭喜!你已经完成了第一个“后端+爬虫”项目!
五、升级版:尝试真实爬虫(可选进阶)
如果你觉得模拟数据不过瘾,可以试试抓取真实网站。以“中国天气网”为例(注意:仅限学习,勿高频请求):
# 真实爬虫示例(替换 crawler.py 中的 get_weather 函数)
def get_weather_real(city_code="101010100"): # 北京的编码
url = f"http://www.weather.com.cn/weather1d/{city_code}.shtml"
headers = {"User-Agent": "Mozilla/5.0"} # 伪装成浏览器
try:
resp = requests.get(url, headers=headers, timeout=10)
resp.encoding = 'utf-8'
soup = BeautifulSoup(resp.text, 'html.parser')
# 这里需要根据网页结构调整选择器(需开发者工具查看)
temp_tag = soup.select_one(".tem")
weather_tag = soup.select_one(".wea")
if temp_tag and weather_tag:
temp = temp_tag.text.strip()
weather = weather_tag.text.strip()
return {"temp": temp, "weather": weather}
else:
return {"error": "数据解析失败"}
except Exception as e:
return {"error": f"请求失败: {str(e)}"}
⚠️ 常见问题:
- 网页结构经常变,选择器会失效 → 学会用浏览器“检查元素”
- 被封 IP → 加
time.sleep(1)控制频率,或使用代理(高级话题)
六、新手常见问题解答(FAQ)
Q1:为什么我的代码运行报错 “ModuleNotFoundError”?
A:说明你没装依赖。回到“环境准备”部分,确保执行了 pip install flask requests beautifulsoup4。
Q2:浏览器打不开 localhost:5000?
A:检查:
- 终端是否还在运行
python app.py(别关了) - 防火墙是否阻止(一般不会)
- 换成
127.0.0.1:5000试试
Q3:爬虫总被网站拒绝怎么办?
A:这是正常现象!真实网站都有反爬。建议:
- 加
headers伪装浏览器 - 控制请求频率(每秒最多 1 次)
- 初学者优先用公开 API(比如和风天气、OpenWeather),比爬网页更稳定
Q4:Flask 是后端?那 Django 呢?
A:Flask 和 Django 都是 Python 后端框架。Flask 轻量、灵活,适合小项目;Django 功能全(自带用户系统、后台等),适合大项目。新手从 Flask 入门更友好。
七、学习建议 & 下一步路线图
✅ 今天你学会了:
- 如何用 Flask 写一个简单 API
- 如何用 requests + BeautifulSoup 抓取网页(或模拟)
- 如何把两者结合起来做完整项目
🔜 接下来建议你:
| 阶段 | 学习内容 | 推荐资源 |
|---|---|---|
| 巩固基础 | Python 函数、字典、异常处理 | 廖雪峰 Python 教程 |
| 深入爬虫 | XPath、Selenium、代理池 | 《Python 网络数据采集》 |
| 后端进阶 | RESTful API 设计、数据库(SQLite) | Flask 官方文档 |
| 项目实战 | 加数据库存天气历史、加缓存防重复爬 | GitHub 搜 “flask weather” |
🚫 避坑指南(血泪经验):
- 不要一上来就啃大项目 → 从小功能做起,比如今天这个
- 不要死记代码 → 理解每一行的作用,自己改参数试试
- 遇到报错别慌 → 复制错误信息 Google,90% 的问题别人都遇到过
结语
技术探索的本质,不是记住多少知识,而是建立“我能搞定它”的信心。我当初第一次跑通 Flask + 爬虫时,兴奋得差点把键盘扔了(笑)。希望今天的教程也能给你带来这种“原来如此!”的顿悟时刻。
如果你跟着做完了,不妨在评论区留言:“我的天气服务跑起来啦!”——我会随机抽几位同学送《Python 自动化实战》电子书。
下期预告:《用一行代码部署你的 Flask 项目到云服务器》,教你把本地服务变成全网可访问!
记得点赞关注,我是你们的大厂搬砖 UP 主,我们下期见!

评论 0