人工智能之编程进阶 Python高级
第十一章 过渡项目
文章目录
- [人工智能之编程进阶 Python高级](#人工智能之编程进阶 Python高级)
- [🌟 项目一:天气查询 CLI 工具(基础)](#🌟 项目一:天气查询 CLI 工具(基础))
- [🎯 目标](#🎯 目标)
- [🔧 技术栈](#🔧 技术栈)
- [📦 功能](#📦 功能)
- [💡 实现要点](#💡 实现要点)
- [1. 获取免费天气 API](#1. 获取免费天气 API)
- [2. 命令行接口](#2. 命令行接口)
- [3. 城市转经纬度(简化版)](#3. 城市转经纬度(简化版))
- [🚀 扩展建议](#🚀 扩展建议)
- [🌟 项目二:静态网页爬虫 + 数据分析(中级)](#🌟 项目二:静态网页爬虫 + 数据分析(中级))
- [🎯 目标](#🎯 目标)
- [🔧 技术栈](#🔧 技术栈)
- [📦 功能](#📦 功能)
- [💡 实现要点](#💡 实现要点)
- [1. 爬取单页](#1. 爬取单页)
- [2. 自动翻页](#2. 自动翻页)
- [3. 保存与分析](#3. 保存与分析)
- [⚠️ 注意](#⚠️ 注意)
- [🚀 扩展建议](#🚀 扩展建议)
- [🌟 项目三:动态网站爬虫 ------ 模拟登录 + 数据抓取(中高级)](#🌟 项目三:动态网站爬虫 —— 模拟登录 + 数据抓取(中高级))
- [🎯 目标](#🎯 目标)
- [🔧 技术栈](#🔧 技术栈)
- [📦 功能](#📦 功能)
- [💡 实现要点](#💡 实现要点)
- [1. 启动浏览器(无头)](#1. 启动浏览器(无头))
- [2. 模拟登录](#2. 模拟登录)
- [3. 抓取仓库](#3. 抓取仓库)
- [🚀 扩展建议](#🚀 扩展建议)
- [🌟 项目四:异步高并发爬虫(高级)](#🌟 项目四:异步高并发爬虫(高级))
- [🎯 目标](#🎯 目标)
- [🔧 技术栈](#🔧 技术栈)
- [📦 功能](#📦 功能)
- [💡 实现要点](#💡 实现要点)
- [1. 异步请求函数](#1. 异步请求函数)
- [🚀 扩展建议](#🚀 扩展建议)
- [🌟 项目五:Scrapy 专业爬虫 + Web API(工程化)](#🌟 项目五:Scrapy 专业爬虫 + Web API(工程化))
- [🎯 目标](#🎯 目标)
- [🔧 技术栈](#🔧 技术栈)
- [📦 功能](#📦 功能)
- [💡 实现要点](#💡 实现要点)
- [1. Scrapy Spider(多站点)](#1. Scrapy Spider(多站点))
- [2. Pipeline 存数据库](#2. Pipeline 存数据库)
- [3. FastAPI 查询接口](#3. FastAPI 查询接口)
- [4. Dockerfile(一键部署)](#4. Dockerfile(一键部署))
- [🚀 扩展建议](#🚀 扩展建议)
- [📌 总结:项目进阶路线图](#📌 总结:项目进阶路线图)
- [✅ 动手建议](#✅ 动手建议)
- 后续
- 资料关注
以下是 5 个由浅入深、覆盖 Python 核心技能的实战项目,每个项目都包含:
- 🎯 项目目标
- 🔧 技术栈(知识点)
- 📦 功能模块
- 💡 实现要点与代码片段
- 🚀 扩展建议
适合从入门到进阶的学习者动手实践,真正"学以致用"。
🌟 项目一:天气查询 CLI 工具(基础)
🎯 目标
通过命令行输入城市名,返回当前天气信息。
🔧 技术栈
requests(HTTP 请求)argparse(命令行参数解析)- JSON 数据处理
- 异常处理
- 免费 API 调用(如 Open-Meteo 或国内聚合 API)
✅ 适合刚学完函数、模块、异常的新手
📦 功能
- 输入城市 → 输出温度、天气状况
- 支持多城市查询
- 网络错误友好提示
💡 实现要点
1. 获取免费天气 API
推荐 Open-Meteo(无需 Key):
python
# 示例:通过经纬度查天气(需先查城市坐标)
def get_weather(lat, lon):
url = f"https://api.open-meteo.com/v1/forecast"
params = {
"latitude": lat,
"longitude": lon,
"current_weather": True
}
resp = requests.get(url, params=params)
data = resp.json()
return data["current_weather"]
2. 命令行接口
python
import argparse
parser = argparse.ArgumentParser(description="天气查询工具")
parser.add_argument("city", help="城市名,如 Beijing")
args = parser.parse_args()
weather = get_weather_by_city(args.city)
print(f"{args.city} 当前温度: {weather['temperature']}°C")
3. 城市转经纬度(简化版)
可内置一个小型字典:
python
CITY_COORDS = {
"Beijing": (39.9042, 116.4074),
"Shanghai": (31.2304, 121.4737),
# 可扩展为读取 CSV 或调用地理编码 API
}
🚀 扩展建议
- 使用
geopy自动将城市名转经纬度 - 添加缓存(避免重复请求)
- 输出彩色文字(
colorama库) - 支持历史天气、未来预报
🌟 项目二:静态网页爬虫 + 数据分析(中级)
🎯 目标
爬取豆瓣电影 Top 250,保存为 CSV,并做简单统计。
🔧 技术栈
requests(获取页面)BeautifulSoup(解析 HTML)pandas(数据分析)csv/json(数据存储)- 正则表达式(可选)
📦 功能
- 自动翻页(共 10 页)
- 提取:电影名、评分、导演、年份
- 保存为
movies.csv - 分析:平均分、最高分电影、年份分布
💡 实现要点
1. 爬取单页
python
url = "https://movie.douban.com/top250"
headers = {"User-Agent": "Mozilla/5.0"}
resp = requests.get(url, headers=headers)
soup = BeautifulSoup(resp.text, "lxml")
for item in soup.select(".item"):
title = item.select_one(".title").text
rating = item.select_one(".rating_num").text
year = item.select_one(".bd p").text.split()[-1].strip("()")
2. 自动翻页
python
all_movies = []
for start in range(0, 250, 25):
page_url = f"https://movie.douban.com/top250?start={start}"
movies = parse_page(page_url)
all_movies.extend(movies)
time.sleep(1) # 礼貌延迟
3. 保存与分析
python
import pandas as pd
df = pd.DataFrame(all_movies)
df.to_csv("douban_top250.csv", index=False)
print("平均分:", df["rating"].astype(float).mean())
print("最高分电影:\n", df.loc[df["rating"].astype(float).idxmax()])
⚠️ 注意
- 遵守
robots.txt - 添加随机 User-Agent 和延迟,避免被封
🚀 扩展建议
- 用
matplotlib可视化评分分布 - 存入 SQLite / MySQL
- 部署为定时任务(每天更新)
🌟 项目三:动态网站爬虫 ------ 模拟登录 + 数据抓取(中高级)
🎯 目标
自动登录 GitHub,抓取用户仓库列表。
🔧 技术栈
selenium(浏览器自动化)WebDriverWait(显式等待)- Cookie / Session 管理
- 无头模式(Headless)
✅ 掌握真实场景中的反爬对抗
📦 功能
- 自动打开 Chrome
- 输入用户名密码(或 Token)
- 登录后跳转到
/username?tab=repositories - 提取仓库名、语言、Star 数
- 保存为 JSON
💡 实现要点
1. 启动浏览器(无头)
python
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
options = webdriver.ChromeOptions()
options.add_argument("--headless")
driver = webdriver.Chrome(options=options)
2. 模拟登录
python
driver.get("https://github.com/login")
driver.find_element(By.ID, "login_field").send_keys("your_email")
driver.find_element(By.ID, "password").send_keys("your_password")
driver.find_element(By.NAME, "commit").click()
# 等待登录成功
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "header[role='banner']"))
)
🔐 安全建议:使用 GitHub Personal Access Token 代替密码!
3. 抓取仓库
python
driver.get(f"https://github.com/{username}?tab=repositories")
repos = []
for repo in driver.find_elements(By.CSS_SELECTOR, "li.public"):
name = repo.find_element(By.CSS_SELECTOR, "h3 a").text
stars = repo.find_element(By.CSS_SELECTOR, "svg.octicon-star").text.strip()
repos.append({"name": name, "stars": stars})
🚀 扩展建议
- 用
pickle保存登录后的 Cookie,下次免登录 - 支持两步验证(需手动扫码或备用码)
- 并发抓取多个用户(配合
threading)
🌟 项目四:异步高并发爬虫(高级)
🎯 目标
并发抓取 100 个网页,比同步快 10 倍以上。
🔧 技术栈
asyncio+aiohttp(异步 HTTP)- 协程(coroutine)
- 限流(semaphore)
- 异常重试机制
📦 功能
- 读取 URL 列表(如
urls.txt) - 异步并发请求(控制最大并发数)
- 成功/失败分别记录
- 统计耗时
💡 实现要点
1. 异步请求函数
python
import aiohttp
import asyncio
async def fetch(session, url):
try:
async with session.get(url, timeout=10) as resp:
return await resp.text()
except Exception as e:
return None
async def main():
urls = [line.strip() for line in open("urls.txt")]
# 限制并发数(防止被封)
semaphore = asyncio.Semaphore(20)
async def bounded_fetch(url):
async with semaphore:
return await fetch(session, url)
async with aiohttp.ClientSession() as session:
tasks = [bounded_fetch(url) for url in urls]
results = await asyncio.gather(*tasks)
print(f"成功: {len([r for r in results if r])} / {len(urls)}")
🚀 扩展建议
- 结合
BeautifulSoup解析内容 - 将结果存入数据库(异步 ORM 如
databases) - 集成日志系统(
logging)
🌟 项目五:Scrapy 专业爬虫 + Web API(工程化)
🎯 目标
构建一个可配置、可扩展、可部署的新闻爬虫系统。
🔧 技术栈
Scrapy(核心框架)Scrapy-Splash或scrapy-selenium(处理 JS)Item Pipeline(数据清洗 + 存储)FastAPI(提供查询接口)Docker(容器化部署)
📦 功能
- 爬取多个新闻站点(如 BBC、Reuters)
- 提取:标题、正文、发布时间、URL
- 去重(基于 URL 指纹)
- 存入 PostgreSQL
- 提供 RESTful API 查询新闻
💡 实现要点
1. Scrapy Spider(多站点)
python
class NewsSpider(scrapy.Spider):
name = "news"
start_urls = [
"https://www.bbc.com/news",
"https://www.reuters.com/world/"
]
def parse(self, response):
if "bbc.com" in response.url:
yield from self.parse_bbc(response)
elif "reuters.com" in response.url:
yield from self.parse_reuters(response)
2. Pipeline 存数据库
python
# pipelines.py
class PostgresPipeline:
def open_spider(self, spider):
self.conn = psycopg2.connect(...)
self.cur = self.conn.cursor()
def process_item(self, item, spider):
self.cur.execute(
"INSERT INTO news (title, content, url) VALUES (%s, %s, %s)",
(item['title'], item['content'], item['url'])
)
self.conn.commit()
return item
3. FastAPI 查询接口
python
# api.py
from fastapi import FastAPI
import psycopg2
app = FastAPI()
@app.get("/news")
def get_news(keyword: str = None):
# 查询数据库
cur.execute("SELECT * FROM news WHERE title ILIKE %s", (f"%{keyword}%",))
return cur.fetchall()
4. Dockerfile(一键部署)
dockerfile
FROM python:3.10
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
CMD ["scrapy", "crawl", "news"]
🚀 扩展建议
- 添加 Redis 去重(Scrapy-Redis)
- 部署到云服务器(AWS / 阿里云)
- 添加定时任务(cron + scrapy crawl)
- 前端展示(Vue/React)
📌 总结:项目进阶路线图
| 项目 | 难度 | 核心能力 |
|---|---|---|
| 天气 CLI 工具 | ⭐ | 基础语法 + API 调用 |
| 豆瓣电影爬虫 | ⭐⭐ | 静态页解析 + 数据分析 |
| GitHub 登录爬虫 | ⭐⭐⭐ | 动态渲染 + 自动化 |
| 异步高并发爬虫 | ⭐⭐⭐⭐ | 异步编程 + 性能优化 |
| Scrapy + API 系统 | ⭐⭐⭐⭐⭐ | 工程化 + 部署 |
✅ 动手建议
- 从项目一做起,确保每一步都能运行
- 代码提交到 GitHub,写好 README
- 逐步扩展功能,不要追求一步到位
- 遇到问题查文档:官方文档是最好的老师!
🌈 记住 :
编程不是"看会了",而是"做会了"。
完成一个项目,胜过十篇教程。
后续
由于以上小项目涉及到未学习的内容,比如数据分析等,可以做过渡练习使用。部分代码已经上传至gitee,后续会逐步更新,主要受时间原因限制,当然自己也可以克隆到本地学习拓展。
祝你 coding 快乐,早日成为 Python 高手!🐍✨
资料关注
公众号:咚咚王
gitee:点击
《Python编程:从入门到实践》
《利用Python进行数据分析》
《算法导论中文第三版》
《概率论与数理统计(第四版) (盛骤) 》
《程序员的数学》
《线性代数应该这样学第3版》
《微积分和数学分析引论》
《(西瓜书)周志华-机器学习》
《TensorFlow机器学习实战指南》
《Sklearn与TensorFlow机器学习实用指南》
《模式识别(第四版)》
《深度学习 deep learning》伊恩·古德费洛著 花书
《Python深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》
《深入浅出神经网络与深度学习+(迈克尔·尼尔森(Michael+Nielsen) 》
《自然语言处理综论 第2版》
《Natural-Language-Processing-with-PyTorch》
《计算机视觉-算法与应用(中文版)》
《Learning OpenCV 4》
《AIGC:智能创作时代》杜雨+&+张孜铭
《AIGC原理与实践:零基础学大语言模型、扩散模型和多模态模型》
《从零构建大语言模型(中文版)》
《实战AI大模型》
《AI 3.0》