42
社区成员




课程:《Python程序设计入门》
班级:2242
姓名:cyx
学号:20224208
实验教师:wzq
实验日期:2023年5月23日
必修/选修: 专选课
Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
例如:编写从社交网络爬取数据,实现可视化舆情监控或者情感分析。
例如:利用公开数据集,开展图像分类、恶意软件检测等
例如:利用Python库,基于OCR技术实现自动化提取图片中数据,并填入excel中。
例如:爬取天气数据,实现自动化微信提醒
例如:利用爬虫,实现自动化下载网站视频、文件等。
例如:编写小游戏:坦克大战、贪吃蛇、扫雷等等
注:在Windows/Linux系统上使用VIM、PDB、IDLE、Pycharm等工具编程实现。
实验需要实现爬取天气数据,实现自动化微信提醒的目标;总共把实验目标拆分成三个部分进行实现:第一部分,运用“爬虫”获取天气状况;第二部分,运用“正则表达式”提取每日的天气数据,并完成信息的编写;第三部分,运用“pywinauto”模块,模拟鼠标键盘,打开微信程序实现消息的自动发送;
a.按照三个小目标,分步完成程序的编写;第一部分,运用“爬虫”获取天气状况:使用request语句,获取“http://t.weather.itboy.net/api/weather/city/101010900 ” 网页中的内容;
b.第二部分,运用“正则表达式”提取每日的天气数据:运用re.findall( )语句,在获取的网页内容中找到所要的信息,并赋值给相应的变量;并用print()函数,初步检验输出结果的准确性;
c.第三部分,运用“pywinauto”模块,模拟鼠标键盘,打开微信程序实现消息的自动发送;
d.确保每一部分能够正常运行后,将三个部分整合成一个完整的程序;
以下是程序的源代码:
import re # 正则表达式
import os
from time import sleep # 休眠
import requests # 爬虫
from pywinauto.keyboard import send_keys # 键盘
#part1 运用爬虫获取天气状况
def get_weather(value):
# 伪装浏览头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'}
# url链接
url = 'http://t.weather.itboy.net/api/weather/city/{0}'.format(value)
# 获取响应
res = requests.get(url=url, headers=headers)
#part2 运用正则表达式提取数据
ymd = re.findall('"ymd":"(.*?)"', res.text)[1]
# 年月日 在res.text文件中找到第二个带"ymd":"(.*?)"结构的内容,并将"(.*?)"中的内容赋值给ymd
week = re.findall('"week":"(.*?)"', res.text)[1] # 星期
high = re.findall('"high":"高温(.*?)"', res.text)[1] # 最高温度
low = re.findall('"low":"低温(.*?)"', res.text)[1] # 最低温度
type0 = re.findall('"type":"(.*?)"', res.text)[1] # 天气类型
notice = re.findall('"notice":"(.*?)"', res.text)[1] # 提示
# 拼接数据
text = '明天:' + ymd + '--' + week + '^{ENTER}' + '天气:' + type0 + \
'^{ENTER}' + '气温:' + low + '-------' + \
high + '^{ENTER}' + 'tips:' + notice
return text
if __name__ == '__main__':
text = get_weather(value=101010900)
# part3 打开微信自动发送信息
wechat_path = r'C:\Program Files (x86)\Tencent\WeChat\WeChat.exe' # 微信安装路径
os.startfile(wechat_path) # 打开微信
sleep(1) # 休息
send_keys('^f') # 按下查找快捷键
send_keys('C.h') # 查找聊天对象
sleep(3) # 休息
send_keys('{ENTER}') # 按下回车键-进入聊天窗口
sleep(0.5) # 休息
text1 = '又到了一天一度贴心的天气预报播报时间啦!' + \
'^{ENTER}下面为男朋友推送明天天气:^{ENTER}' + text \
+ '^{ENTER}^{ENTER}' + '❤晚安噢,我亲爱滴npy❤!'+ '^{ENTER}' + '祝好梦,梦里有我。'
send_keys(text1) # 输入聊天内容
send_keys('{ENTER}') # 按下回车键 点击发送
以下是程序的运行视频:
(1)经过前前后后共四个实验的磨砺后,编写程序时全半角误用、缩进使用不规范、冒号缺失等一些小错误已经可以较大程度地避免;
(2)虽然在最开始着手完成第四个实验时,对这项大作业不知道该如何下手;所幸最终找到了一个适合自己难度的并且自己感兴趣的实验内容,并将“爬虫”“序列的应用”“正则表达式”等一系列之前自认为自己掌握较为欠缺的知识点得到了运用,给自己的python学习画上圆满的句号;
a.虽然Python课是一门技术类的课程,但是老师对我们的宽容与耐心,使我们对这门课没有了那么大的畏惧和恐惧心理,反而能以非常平和且轻松的心态面对每一堂课的学习;就个人对课程内容的接受来说,对于课程前半部内容,可能由于之前有在初高中接触过一部分编程的知识,而学起来较为轻松,也能较为快速地完成前两个实验的内容;而从老师开始讲授“序列的应用”“正则表达式”“socket”“爬虫”等内容后,可能由于不熟悉的新知识点地陡然增多,以及自己对Python这门课的重视程度没有及时提高,课后没有抽出相应时间进行知识点的复习与整理,导致后半程Python课的上课效率低下,真正能够掌握并熟练运用的知识并不是很多。没有善始善终,以饱满的热情完成这门课程的学习,以较好的学习成果回馈老师的宽容与耐心,让我在这门课结课后常常感到有点遗憾和愧疚;
b.当初是报着通过这一学期的学习,能够学会借助python处理一些表格等,学会办公自动化的一些小技巧,减轻日后工作时处理数据的工作量;但是直到学期末,自己仍然处于老师教授的内容理解起来十分吃力的境况,更不必提自己运用课内学到的Python知识自学课外的一些内容了,这导致自己学期初立下的flag也就无疾而终了。这份自己未涉及到的知识点,也成了我学习这门课留下的第二重小遗憾。
a.由于python课每一次课的课时较多,导致每次老师三节课满堂灌下来,常常几乎能够给同学们串完一章的内容。基于每次课知识传授的高密度,以及文科生对理科内容接受较慢的情况,建议老师每次课前可以适当布置一些预习任务,例如让同学们提前阅读教材上的相应内容或者您发布群中的预习材料,使得同学们在课前就能形成对相应知识的初步了解;
b.基于这学期同学们对python知识的复习、巩固和运用主要是集中在完成实验时,建议老师以后在平时增设一些小实验、随堂的动手操作等,使同学们能够趁热打铁,在新知刚学时就能得到有效的复习,在对知识运用刚存在疑惑的时候就能够将其暴露并加以解决。
c.最后一点的建议,也是大家说得最多的一点,就是希望老师能够对大家严格一点,不要对我们过于纵容啦!