当前位置:首页 >> 主机教程

常见SEO泡沫云服务器人工智能之编程进阶Python高级:第十一章过渡项目

发布时间:2025-12-21 17:09:43 作者:熊猫主机教程网
简介 阿里云服务器进去黑屏 人工智能之编程进阶 Python高级 第十一章 过渡项目 以下是5 个由浅入深、覆盖 Python 核心技能的实战项目,每个项目都包含:项目目标技术栈(知识点)功能模块实现要点与代码片段扩展建议 适合从入门到进阶的学习者动手实践,真正学以致用。 项目一:天气查询 CLI 工具(基础

阿里云服务器进去黑屏

人工智能之编程进阶 Python高级

第十一章 过渡项目

以下是5 个由浅入深、覆盖 Python 核心技能的实战项目,每个项目都包含:

项目目标技术栈(知识点)功能模块实现要点与代码片段扩展建议

适合从入门到进阶的学习者动手实践,真正学以致用。

项目一:天气查询 CLI 工具(基础)

目标

通过命令行输入城市名,返回当前天气信息。

技术栈

requests(HTTP 请求)argparse(命令行参数解析)JSON 数据处理异常处理免费 API 调用(如 Open-Meteo 或国内聚合 API)

✅ 适合刚学完函数、模块、异常的新手

功能

输入城市 → 输出温度、天气状况支持多城市查询网络错误友好提示

实现要点

1. 获取免费天气 API

推荐 Open-Meteo(无需 Key):

示例:通过经纬度查天气(需先查城市坐标)defget_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()returndata["current_weather"]

2. 命令行接口

importargparse 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. 城市转经纬度(简化版)

可内置一个小型字典:

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分析:平均分、最高分电影、年份分布

实现要点

阿里云服务器cpu跑满

1. 爬取单页

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. 自动翻页

all_movies=[]forstart 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. 保存与分析

importpandasaspd 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. 启动浏览器(无头)

fromseleniumimportwebdriverfromselenium.webdriver.common.byimportByfromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdriver.supportimportexpected_conditionsasEC options = webdriver.ChromeOptions() options.add_argument("--headless") driver = webdriver.Chrome(options=options)

2. 模拟登录

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. 抓取仓库

driver.get(f"https://github.com/{username}?tab=repositories")repos=[]forrepo in driver.find_elements(By.CSS_SELECTOR,"li.public"):name= repo.find_element(By.CSS_SELECTOR,"h3 a").textstars= repo.find_element(By.CSS_SELECTOR,"svg.octicon-star").text.strip()repos.append({"name": name,"stars": stars})

扩展建议

用 pickle 保存登录后的 Cookie,下次免登录支持两步验证(需手动扫码或备用码)并发抓取多个用户(配合 threading)

项目四:异步高并发爬虫(高级)

目标

并发抓取 100 个网页,比同步快 10 倍以上。

技术栈

小米5s plus云服务器

asyncio + aiohttp(异步 HTTP)协程(coroutine)限流(semaphore)异常重试机制

功能

读取 URL 列表(如 urls.txt)异步并发请求(控制最大并发数)成功/失败分别记录统计耗时

实现要点

1. 异步请求函数

importaiohttpimportasyncioasyncdeffetch(session, url):try:asyncwithsession.get(url, timeout=10)asresp:returnawaitresp.text()exceptExceptionase:returnNoneasyncdefmain():urls = [line.strip()forlineinopen("urls.txt")]限制并发数(防止被封)semaphore = asyncio.Semaphore(20)asyncdefbounded_fetch(url):asyncwithsemaphore:returnawaitfetch(session, url)asyncwithaiohttp.ClientSession()assession: tasks = [bounded_fetch(url)forurlinurls] results =awaitasyncio.gather(*tasks) print(f"成功:{len([rforrinresultsifr])}/{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(多站点)

classNewsSpider(scrapy.Spider):name ="news"start_urls = ["https://www.bbc.com/news","https://www.reuters.com/world/"]defparse(self, response):if"bbc.com"inresponse.url:yieldfromself.parse_bbc(response)elif"reuters.com"inresponse.url:yieldfromself.parse_reuters(response)

2. Pipeline 存数据库

pipelines.pyclassPostgresPipeline:defopen_spider(self, spider):self.conn = psycopg2.connect(...)self.cur =self.conn.cursor()defprocess_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()returnitem

3. FastAPI 查询接口

api.pyfromfastapiimportFastAPIimportpsycopg2 app = FastAPI()@app.get("/news")defget_news(keyword: str = None):查询数据库cur.execute("SELECT * FROM news WHERE title ILIKE %s", (f"%{keyword}%",))returncur.fetchall()

4. Dockerfile(一键部署)

FROMpython:3.10COPY. /appWORKDIR/appRUNpip install -r requirements.txtCMD["scrapy", "crawl", "news"]

扩展建议

添加 Redis 去重(Scrapy-Redis)部署到云服务器(AWS / 阿里云)添加定时任务(cron + scrapy crawl)前端展示(Vue/React)

总结:项目进阶路线图

项目

难度

核心能力

天气 CLI 工具

基础语法 + API 调用

豆瓣电影爬虫

⭐⭐

静态页解析 + 数据分析

GitHub 登录爬虫

⭐⭐⭐

动态渲染 + 自动化

异步高并发爬虫

⭐⭐⭐⭐

异步编程 + 性能优化

Scrapy + API 系统

⭐⭐⭐⭐⭐

工程化 + 部署

✅ 动手建议

1.从项目一做起,确保每一步都能运行2.代码提交到 GitHub,写好 README3.逐步扩展功能,不要追求一步到位4.遇到问题查文档:官方文档是最好的老师!

记住:编程不是看会了,而是做会了。完成一个项目,胜过十篇教程。

后续

由于以上小项目涉及到未学习的内容,比如数据分析等,可以做过渡练习使用。部分代码已经上传至gitee,后续会逐步更新,主要受时间原因限制,当然自己也可以克隆到本地学习拓展。

祝你 coding 快乐,早日成为 Python 高手!✨

资料关注

公众号:咚咚王gitee:ai_learning: 人工智能学习和实践

《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》

云付服务器