文章目录
20231313 2023-2024-5 《Python程序设计》实验四报告
课程 | 《Python程序设计》 |
---|---|
班级 | 2313 |
姓名 | 张景云 |
学号 | 20231313 |
实验教师 | 王志强 |
实验日期 | 2024年5月15日 |
必修/选修 | 公选课 |
一、实验内容:
Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
例如:编写从社交网络爬取数据,实现可视化舆情监控或者情感分析。
例如:利用公开数据集,开展图像分类、恶意软件检测等
例如:利用Python库,基于OCR技术实现自动化提取图片中数据,并填入excel中。
例如:爬取天气数据,实现自动化微信提醒
例如:利用爬虫,实现自动化下载网站视频、文件等。
例如:编写小游戏:坦克大战、贪吃蛇、扫雷等等
注:在Windows/Linux系统上使用VIM、PDB、IDLE、Pycharm等工具编程实现。
二、我的关注:
1.利用爬虫,爬取微博热搜榜的内容,并输入到excel表格中
i.优点:
不用每天都打开微博就可以知道热度较高的内容,并可以通过表格里的超链接直接跳转到自己所感兴趣的内容,减少时间的浪费
ii.设计及流程:
1.库函数:
- json: 用于处理 JSON 格式的数据。
- openpyxl: 用于创建和修改 Excel 文件。
- requests: 用于发送 HTTP 请求并获取响应数据
import json
import openpyxl
import requests
2.创建Excel
创建一个新的 Excel 工作簿对象 wb,并获取默认的工作表 ws。使用 requests.get 方法发送一个 HTTP GET 请求,获取微博实时热搜榜的数据。通过 json.loads 方法将返回的 JSON 格式的数据转换为 Python 字典。
wb = openpyxl.Workbook()
ws = wb.active
ws.append(['排名', '热搜分类', '热搜关键词', '链接']) # 添加一列用于链接
url = requests.get("https://weibo.com/ajax/side/hotSearch")
data = json.loads(url.text)['data']['realtime']
3.创建单元格值和链接变量:
-
cell_value:热搜关键词。
-
cell_link:以热搜关键词为参数构建的微博搜索链接。
-
使用 ws.append 方法将每个热搜条目的排名、分类、关键词和链接添加到 Excel 工作表中。
-
获取当前单元格,并使用 cell.hyperlink 属性将单元格设置为超链接,链接到对应的微博搜索页面。
iii.源代码:
'''
@Project :Project Achive
@File :ex41.py
@IDE :PyCharm
@Author :20231313
@Date :2024/5/24 20:00
'''
import json
import openpyxl
import requests
wb = openpyxl.Workbook()
ws = wb.active
ws.append(['排名', '热搜分类', '热搜关键词', '链接'])
url = requests.get("https://weibo.com/ajax/side/hotSearch")
data = json.loads(url.text)['data']['realtime']
for i in data:
try:
print(f'热搜:{i["realpos"]}, 热搜分类[{i["category"]}], 热搜关键词:{i["word"]}')
cell_value = i["word"]
cell_link = f'https://www.weibo.com/s?k={cell_value}'
ws.append([i["realpos"], i["category"], cell_value, cell_link])
cell = ws.cell(row=ws.max_row, column=ws.max_column) # 获取当前单元格
cell.hyperlink = cell_link # 设置超链接
except:
pass
wb.save("热搜.xlsx")
iv.运行结果
ex41
2.编写一个查询小程序,用来查询某地天气信息
i.优点:不用点开APP或者网页,避免了看广告的时间浪费,或者想点击关闭却误触了其他地方导致跳转到其他应用造成的恼火
ii.设计及流程:
1.库函数:
- requests: 用于发送 HTTP 请求并获取响应数据
import requests
2.get_weather 的函数获取指定城市的天气信息
函数接收两个参数:city_name(要查询的城市名称)和 api_key
根据传入的城市名称和 API 密钥构建请求 URL。
3.反馈过程
尝试发送 HTTP GET 请求到 API,并将响应数据解析为 JSON 格式。
如果响应状态码为 200,表示请求成功,从响应数据中提取出天气信息,并打印出城市名、天气状况和温度。
如果响应状态码不为 200,则打印出请求失败的原因。
iii.源程序
'''
@Project :Project Achive
@File :ex42.py
@IDE :PyCharm
@Author :20231313
@Date :2024/5/24 20:00
'''
import requests
def get_weather(city_name, api_key):
url = f"https://api.seniverse.com/v3/weather/now.json?key={api_key}&location={city_name}&language=zh-Hans&unit=c"
try:
response = requests.get(url)
data = response.json()
if response.status_code == 200:
weather = data["results"][0]["now"]
print(f"城市:{city_name}")
print(f"天气:{weather['text']}")
print(f"温度:{weather['temperature']}℃")
else:
print("请求失败:", data["status"])
except Exception as e:
print("发生异常:", e)
if __name__ == "__main__":
city_name = input("请输入城市名称:")
api_key = "SIehe-pZA2BlcmxBo" //此处的api是我在心知天气上的注册得到的,因人而异而变
get_weather(city_name, api_key)
iv.运行结果
ex42
三、实验过程遇到的问题及感悟
问题
- 库函数安装的问题,出现traceback import requests 失败的情况
Ans:这里通过查找相关资料,想通过pip install requests 的常规方法进行安装,但存在当前程序所在的project与下载的site-packages不在同一个磁盘,所以这个方法行不通,其实也想过卸载掉重新删除,但在详细阅读pycharm界面后,意外发现了个比较简单粗暴的解决方法,因为在没有库函数的情况下会报错,所以在界面上requests等函数下面就会有红色的波浪线,就像下图所示,所以就可以直接点击install package scipy直接安装,这样就可以跳过使用cmd的安装。
除此之外还可以通过在settings 里面手动导入,如下图所示,通过在小界面左上角的加号,去手动添加函数,我们还可以查看现有的package,避免重复安装
-
第一版的代码只是能在状态栏中输出,并不能填入到Excel表格中,就如下图这样,虽然也能大概实现初衷,但看着十分的混乱
Ans:查找资料后,选择使用openpyxl库,该库专门用于处理Excel文件,通过这个库就可以轻松的实现创建,修改单元格内容,填入数据等一系列的要求。
-
在实现查询天气的时候,API接口的查找比较困难,筛选了一些国内外的网站,包括OpenWeatheMap、中国天气网,但不是因为资质原因就是需要付费,所以最后也是选择了心知天气的API服务,同时这里还犯了一个比较愚蠢的错误,就是变量的先后问题,使用了api的url定义在api之前了,导致报错
感悟
掌握一项技能之后还是需要多加练习,上面的我写的两个程序,基本上没有超出零基础学Python这本书的内容,所以包括在遇到一些问题后,耐下心去从多方寻找解决方法,对额外知识的学习,譬如学习使用openpyxl库,我可以将获取的数据保存到Excel表格中,并对表格进行格式化,使数据更易于理解和分析;也引发了我的思考问题能力,比如查询天气信息时,我学会了如何使用API进行数据请求,这让我更加熟悉了API的概念和使用方法,并了解了如何处理API返回的数据,同时也会思考是否可以复杂一点去做这个问题,利用爬虫先将天气信息扒下来存储起来,再进行查询,这样是不是就可以跳过了API这一个步骤,等等。
四、全课程总结
课程总结和感悟
先说课程叭,确实这十几周的课程让我学到了很多,从一窍不通到能差不多的写出能实现自己想法的程序,从基础语法、文件操作到socket网络通信,python知识方面收获颇深;再说感悟,从第一节课初识王老师开始,就被不同于其他老师的讲课风格所深深打动,将复杂的python程序讲解得很通俗易懂,并手把手教我们写程序,从人生苦短我用Python,到上传Gitee的三把刀,如此幽默令人印象深刻的话语,简单明了的将网络上繁杂的教程概括的淋漓尽致叭,初次之外印象最深刻的是,第一次实验的时候遇到了一些问题,即使是到了半夜老师还是帮我解答了问题,深受感动!!最后就是最后一节课的殷殷嘱托也我回味无穷,让我对自己的行为进行了反思,确实在所有选修课中,python是让我最得到锻炼的一门课,显然各种实验,上课的跟着写的小代码,大大提高了我的动手能力,克服了我的惰性,课下也愿意拿出时间去琢磨这个东西,这个是让我发生蜕变的重要一点。
意见和建议
希望老师可以将上课的课件或者知识大纲之类的也分享到群聊中,这样或许可以更好的方便课下复习;其次是在随机提问环节,可以适当的引入奖惩机制,适当的激发一下积极性,这样学习效率可能会更高;python实验可以更多地像socket通信那样能体现个性化的方向靠拢,根据含大模型语言的量来加减分数,来减少对大模型的依赖。