20231313实验四《Python程序设计》实验报告

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通信那样能体现个性化的方向靠拢,根据含大模型语言的量来加减分数,来减少对大模型的依赖。

  • 14
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值