Python-100-Days 公开课实战:用 Python 玩转图像处理、微信群发与热点新闻推送

发布时间:2026/9/30 6:42:20
Python-100-Days 公开课实战:用 Python 玩转图像处理、微信群发与热点新闻推送
文档教程【免费下载链接】Python-100-DaysPython - 100天从新手到大师项目地址https://gitcode.com/GitHub_Trending/py/Python-100-Days点击查看免费下载本篇文章源自 Python-100-Days 项目「第04次公开课-好玩的Python」的内容是一份面向初学者的趣味实战指南全程只需要 Python 的交互式环境与少量三方库就能完成代码 P 图、向微信好友群发祝福视频、不用客户端查看热点新闻三个真实可运行的小项目。读完本文你将掌握 ipython 的高效交互技巧、Pillow 图像处理 API、itchat 微信接口的基本用法以及 requests 抓取接口数据并配合短信网关做消息推送的完整流程。环境准备用 ipython 打造好玩的交互式环境本节所有代码都非常简单简单到直接在交互式环境中就能运行。官方 Python 自带的交互式环境REPL功能相对简陋推荐使用 ipython 替代。安装只需一条命令pip install ipython如果系统中同时存在 Python 2 和 Python 3 等多套环境也可以使用pip3 install ipython安装成功后在终端键入ipython命令即可进入交互式环境。ipython 最直观的四个优点帮助系统使用?或??可以获取对象、函数、方法的帮助文档??还能看到源码级别的信息系统命令使用!前缀可以直接调用系统命令例如!ls、!pwd无需退出交互式环境自动补全键入变量或函数名的前几个字符后按 Tab 键即可自动补全或弹出候选列表魔法指令内置%timeit、%run、%pdb等魔法命令例如%timeit可以精确测量一小段代码的执行耗时这对入门阶段调试代码非常友好。没有工具用代码也能 P 图安装 PillowPILPython Imaging Library是 Python 平台上事实上的图像处理标准库功能强大且 API 简单易用。但 PIL 仅支持到 Python 2.7且长期无人维护于是一群志愿者在 PIL 基础上创建了兼容的继承者——Pillow它既支持 Python 3.x又加入了许多有用且有趣的新特性。安装命令pip install pillow同样多环境情况下可使用pip3 install pillow加载图片Pillow 的核心是Image类通过Image模块的open函数读取图片并获得Image对象from PIL import Image chiling Image.open(chiling.jpg) chiling.show()Image对象还提供了三个查看图像基本信息的重要属性format图像格式如 JPEG、size图像的宽高尺寸、mode图像模式如 RGB。在仓库配套文档 Day21-30/28.Python处理图像.md 中这些属性均有完整示例该文档还系统讲解了 RGB/RGBA 颜色模型与像素概念——计算机中红、绿、蓝三种色光以不同比例叠加即可组合出其他颜色图像最小单位就是带有明确位置和色彩数值的像素。使用滤镜ImageFilter模块提供了多种预设滤镜配合filter方法一行代码即可完成风格化处理from PIL import ImageFilter chiling.filter(ImageFilter.EMBOSS).show() chiling.filter(ImageFilter.CONTOUR).show()其中EMBOSS产生浮雕效果CONTOUR提取图像轮廓。ImageFilter还内置了GaussianBlur高斯模糊、BLUR模糊、SHARPEN锐化等常用滤镜且支持自定义滤镜。图像剪裁和粘贴指定一个四元组(left, top, right, bottom)作为剪裁区域即可用crop方法取出图像局部剪裁出的局部还能继续叠加滤镜再通过paste方法贴回原图rect 220, 690, 265, 740 watch chiling.crop(rect) watch.show() blured_watch watch.filter(ImageFilter.GaussianBlur(4)) chiling.paste(blured_watch, (220, 690)) chiling.show()这段代码演示了一个非常实用的局部打码思路把照片中手表所在区域裁出来施加高斯模糊后贴回原位敏感细节就被隐藏了。值得注意的是paste粘贴的图像尺寸必须与目标位置匹配如果需要调整尺寸可以使用resize方法。在 Day21-30/28.Python处理图像.md 中就有先crop出吉多的头像、再用resize调整大小后paste到另一张照片上的完整案例。生成镜像利用transpose方法配合翻转常量可以快速生成水平镜像或垂直翻转的图像chiling2 chiling.transpose(Image.FLIP_LEFT_RIGHT) chiling2.show()Image.FLIP_LEFT_RIGHT表示水平翻转左右镜像Image.FLIP_TOP_BOTTOM表示垂直翻转此外transpose还支持Image.ROTATE_90、ROTATE_180、ROTATE_270等旋转模式rotate方法则可以实现任意角度的旋转。生成缩略图thumbnail方法会按比例把图片缩小到指定尺寸范围内是批量处理图片、生成预览图的常用手段width, height chiling.size width, height int(width * 0.4), int(height * 0.4) chiling.thumbnail((width, height))注意thumbnail是原地修改Image对象且会保持原始宽高比不会产生变形。合成图片把两张处理好的图片粘贴到同一个画框中就能拼出一张完整的合成图frame Image.open(frame.jpg) frame.show() frame.paste(chiling, (210, 150)) frame.paste(chiling2, (522, 150)) frame.show()仓库配套的完整图像处理脚本公开课目录下提供了配套脚本 公开课/第04次公开课-好玩的Python/code/example01.py将上述滤镜、镜像、模糊、缩略图操作串成了一段可整体运行的代码from PIL import Image, ImageFilter chiling Image.open(resources/chiling.jpg) width, height chiling.size chiling.show() chiling.transpose(Image.FLIP_LEFT_RIGHT).show() chiling.filter(ImageFilter.GaussianBlur(4)).show() chiling.filter(ImageFilter.EMBOSS).show() chiling.thumbnail((width // 4, height // 4)) chiling.show()与本文中的逐步演示相比该脚本把整图尺寸的 1/4 作为缩略图目标展示了//整除运算在图像尺寸计算中的实际应用。需要说明的是脚本运行前要在脚本所在目录准备resources/chiling.jpg图片文件。更进一步用 Pillow 绘图如果觉得P 图还不够尽兴Pillow 还提供了ImageDraw模块用于凭空作画ImageDraw.Draw函数返回ImageDraw对象通过其arc、line、rectangle、ellipse、polygon等方法可以绘制圆弧、线条、矩形、椭圆、多边形等图形通过text方法可以在图像上添加文字。在 Day21-30/28.Python处理图像.md 中就有一段生成 800×600 随机彩色图案的完整示例——用Image.new创建空白画布、ImageFont.truetype加载字体、ImageDraw绘制对角线和椭圆最后image.save(result.png)保存成文件所用字体文件需要自行准备并放置在代码目录下。向微信好友群发祝福视频安装 itchat 并登录itchat 是一个开源的微信个人号接口它让用 Python 调用微信变得非常简单。安装命令pip install itchat多环境情况下使用pip3 install itchat登录只需一行代码import itchat itchat.auto_login()运行后用微信扫描屏幕上出现的二维码即可完成登录登录之后才能获取好友信息以及向好友发送消息。获取好友列表get_friends方法返回所有好友的信息列表列表的第一个元素就是自己friends_list itchat.get_friends(updateTrue) print(len(friends_list)) luohao friends_list[0] props [NickName, Signature, Sex] for prop in props: print(luohao[prop])每个好友是一个字典对象NickName昵称、Signature签名、Sex性别、City城市等都是它的字段updateTrue表示强制从服务端刷新数据。随机选出幸运好友用random.sample从好友列表中随机抽样 5 人从索引 1 开始即排除自己并逐个打印他们的信息lucky_friends random.sample(friends_list[1:], 5) props [NickName, Signature, City] for friend in lucky_friends: for prop in props: print(friend[prop] or 没有此项信息) print(- * 80)这里friend[prop] or 没有此项信息利用了or运算符的短路特性当字段值为空时输出兜底文案。发送文字消息send_msg方法可以向指定好友发送文本消息toUserName参数是好友的唯一标识itchat.send_msg(急需一个红包来拯救堕落的灵魂, toUserName8e06606db03f0e28d0ff884083f727e6)群发视频把随机抽 5 人 发送视频组合起来就能向幸运好友群发祝福视频视频路径需要替换为本地实际文件路径lucky_friends random.sample(friends_list[1:], 5) for friend in lucky_friends: username friend[UserName] itchat.send_video(/Users/Hao/Desktop/my_test_video.mp4, toUserNameusername)itchat 还能做什么利用 itchat 还能做很多事情查看撤回的消息注册一个接收消息的钩子函数itchat.msg_register当好友发消息又撤回时就能在本地捕获并查看被撤回的内容检测好友关系想知道某个好友是否把自己删除或拉入黑名单可以利用 itchat 封装的群聊功能——非好友和黑名单用户不会被拉入群聊通过创建群聊函数的返回值即可判定你和指定用户之间的关系。需要提醒的是微信个人号接口存在账号风控风险自动化操作需谨慎使用、控制频率并遵守微信平台的使用规则。不用客户端查看热点新闻安装 requestsrequests 是 Python 生态中最流行的 HTTP 请求库它把 URL 请求、会话管理、JSON 解析等能力封装得极其简洁。安装命令pip install requests多环境情况下使用pip3 install requests仓库公开课目录下提供了 requests 官方文档首页的截图 公开课/第04次公开课-好玩的Python/res/requests.png可以看到该库支持的 Python 版本与安装说明入口是理解requests 让 HTTP 服务人类这一口号的最佳注脚。通过 API 获取新闻数据爬取新闻数据通常有两种途径直接爬取页面或调用现成的数据接口。本例使用天行数据提供的新闻聚合接口需自行注册并申请 Keyimport requests resp requests.get(http://api.tianapi.com/allnews/?key请使用自己申请的Keycol7num50)调用接口时需要把key参数替换为注册成功后系统分配的 keycol指定栏目编号num指定返回条数此处为 50 条。反序列化并筛选新闻接口返回的是 JSON 字符串用json.loads将其解析为字典取出newslist新闻列表import json newslist json.loads(resp.text)[newslist]然后循环遍历筛选出自己感兴趣的新闻例如标题中包含华为for news in newslist: title news[title] url news[url] if 华为 in title: print(title) print(url)调用短信网关推送新闻到手机找到感兴趣的新闻后可以把标题和链接通过短信发送到手机上。本例使用螺丝帽短信网关服务发送短信需要付费但一般平台会提供若干条免费测试短信先用正则从原始 URL 中提取出可拼接的路径部分import re pattern re.compile(rhttps*:\/\/[^\/]*\/(?Purl.*)) matcher pattern.match(url) if matcher: url matcher.group(url) resp requests.post( urlhttp://sms-api.luosimao.com/v1/send.json, auth(api, key-请使用你自己申请的Key), data{ mobile: 13548041193, message: f发现一条您可能感兴趣的新闻 - {title}详情点击https://news.china.com/{url} 查看。【Python小课】 }, timeout10, verifyFalse )这段代码的要点auth参数传入(api, key-...)形式的 HTTP Basic 认证元组其中 key 需要替换为你自己的密钥data中的mobile是接收短信的手机号message是短信内容timeout10设置请求超时时间避免网络异常时长时间阻塞verifyFalse表示跳过 SSL 证书校验仅适合测试环境生产环境应保留证书校验。重要说明发送短信必须遵守平台规则违规短信无法发送。上面短信中使用的模板发现一条您可能感兴趣的新闻 - ###详情点击https://news.china.com/### 查看。和短信签名【Python小课】需要登录螺丝帽管理平台提前配置若不熟悉配置流程可以联系平台客服咨询。小结本公开课的三个小项目覆盖了 Python 生态中三组高频三方库ipython交互式开发、Pillow图像处理、itchat微信接口与 requestsHTTP 请求 json数据解析的组合。它们共同展示了编程的乐趣所在——日常中许多繁琐乏味的任务P 图、群发消息、盯新闻都可以通过几十行 Python 代码自动完成。相关技能在 Day21-30/28.Python处理图像.md 中有更系统的讲解RGB 颜色模型、像素、crop/thumbnail/paste/transpose/filter/rotate/putpixel等 API 及ImageDraw绘图公开课配套脚本 公开课/第04次公开课-好玩的Python/code/example01.py 则可以直接运行体验。继续学习 Python-100-Days 的后续内容你会发现 Python 能做的事情远不止这些。赞分享文档教程【免费下载链接】Python-100-DaysPython - 100天从新手到大师项目地址https://gitcode.com/GitHub_Trending/py/Python-100-Days点击查看免费下载相关推荐终极FF14钓鱼计时器渔人的直感完整使用指南终极FF14钓鱼计时器渔人的直感完整使用指南 你是否在《最终幻想14》中为错过幻海流而懊恼是否因为分心而错失稀有鱼种 渔人的直感 这款专为FF14钓鱼爱桌面应用Python-100-Days项目部署与运维实战Python 100 Days项目部署与运维实战 本文详细介绍了Python 100 Days项目的完整部署与运维实战方案涵盖Docker容器化部署、环境配置文档教程LastAdapter vs 传统适配器性能对比与最佳实践指南LastAdapter vs 传统适配器性能对比与最佳实践指南 还在为Android开发中的RecyclerView适配器编写而烦恼吗LastAdapter上一篇GitHub_Trending/ad/adk-samples音频制作代理播客脚本与剪辑建议生成下一篇终极对比分析I-SOLAR-10.7B与其他韩语大模型的性能差异完全指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考