当前位置: 首页 > news >正文

Python课设-谁为影狂-豆瓣数据【数据获取与预处理课设】

🏆 作者简介:席万里
⚡ 个人网站:https://dahua.bloggo.chat/
✍️ 一名后端开发小趴菜,同时略懂Vue与React前端技术,也了解一点微信小程序开发。
🍻 对计算机充满兴趣,愿意并且希望学习更多的技术,接触更多的大神,提高自己的编程思维和解决问题的能力。

如果本篇文章对友友你有所帮助,那还请点个小赞赞~

文章目录

  • 谁为影狂-豆瓣数据【数据获取与预处理课设】
  • 1.数据获取可行性及需求分析
    • 1.1 课题背景
    • 1.2 目的和意义
    • 1.3 主要研究内容
    • 1.4 课程设计创新点概述
  • 2.核心算法
    • 2.1 算法描述
    • 2.2 问题总结
  • 4.详细设计
    • 4.1 流程图
    • 4.2 代码
    • 4.3 效果展示
  • 5. 总结

谁为影狂-豆瓣数据【数据获取与预处理课设】

1.数据获取可行性及需求分析

1.1 课题背景

《数据获取与预处理》是一门实践性较强的软件基础课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践,也要加强同其他学科的关联。本课程设计的目的就是要达到理论与实际应用相结合,使同学们能够根据特定的案列,学会分析爬取页面的方法,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,能够运用数据获取与预处理的原理和方法解决简单的实际问题,逐步培养学生良好的程序设计能力。

1.2 目的和意义

(1)目的:从豆瓣top250上面获取的电影名称、导演和演员、评分、排名、图片等信息并保存下来
(2)意义:通过对电影数据的分析得出自己想要的信息。

1.3 主要研究内容

本文的主要研究内容包括下面两个部分。
(1)分析网页
对网页进行分析,寻找规律,获得想要的数据链接
(2)数据的提取与保存
对从网站中获取的信息进行分析,提取所需要的信息并把这些信息保存下来,并将部分信息做成折线图。

1.4 课程设计创新点概述

在实现时学到不同的方法读取和存储数据,实现按两种不同的xpath方法分别存电影封面图片和电影名称、导演和演员、评分、排名、简介等信息,对网页的分析更加详细。并对爬取的信息进行了处理,获取的数据信息更加简洁,看起来更轻松

2.核心算法

2.1 算法描述

for start_num in range(0, 250, 25)

进行10次循环,每次读取25个电影的图片,信息,分步实现,可以方便查出程序问题,requests.get向网页发出请求。

response = requests.get(f"https://movie.douban.com/top250?start={start_num}", headers=headers) 

后面用网页上分析复制下来的xpath获取对应数据

lis = html.xpath('//*[@id="content"]/div/div[1]/ol/li') 

存放到文件和列表中,按列表前十绘制折线图

2.2 问题总结

代码量大,代码有部分太过于繁琐,对于折线图的绘制函数调用不是很合理,绘制图是在程序运行中实现,导致不关掉折线图就无法继续爬取数据。网络爬虫如果不严格控制网络采集的速度,会对被采集网站服务器造成很重的负担。恶意消耗别人网站的服务器资源,甚至是拖垮别人网站是一件不道德的事情。

本人承诺本次课题中爬取的数据都是公开数据,取得数据的手段合法,项目中爬取取得的所有数据仅供学习使用非商用,且没有对网站造成伤害

4.详细设计

首先根据url访问到电影网站页面,通过request请求访问到电影信息,调用读取电影封面函数读取电影封面和链接将网络上的内容下载到本地,保存在c盘的douban文件中,再调用获取电影信息函数读取电影名、导演和演员、评分、排名、简介等信息以及信息并把它们分别保存在豆瓣top250.csv文件中,以及把排行前10的电影评分和评价人数做成折线图。

4.1 流程图

在这里插入图片描述

4.2 代码

打开豆瓣网站右键鼠标选择检查,点击网络,在里面获得user-agent,再获取网页规律得出url,通过requests.get()函数赋值给response

headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.57"}
i = 0
for start_num in range(0, 250, 25):# 发起get请求:get方法会返回请求成功的响应对象response = requests.get(f"https://movie.douban.com/top250?start={start_num}", headers=headers)  # urltime.sleep(random.uniform(0.5, 1))img(response.text, start_num)massage(response, i)i = 1

存储图片函数,先对网页分析,再用etree.HTML()函数将字符串网页转换成_Element对象,再用列表存储电影信息,然后分别用title存放电影标题,img_url存放电影封面地址,再用urllib.request.urlretrieve方法将网上内容下载本地文件夹

element = html.etree.HTML(response)# 用response.text获取字符串格式的网页,用etree.HTML()可以将字符串格式的网页转换成_Element对象lis = element.xpath('//ol[@class="grid_view"]')[0]i = 1for li in lis:title = li.xpath('.//span[@class="title"]/text()')[0]  # 获取影片标题img_url = li.xpath('.//img/@src')[0]  # 获取封面地址#封面地址在img这个标签下的src属性中file_name = 'C:/douban/' + str(start_num + i) + '.' + title + '.jpg'  # 点号能防止和名字粘在一起urllib.request.urlretrieve(img_url, filename=file_name)  # 将网络上的文件下载到本地。该函数有两个必须的参数:第一个是文件的 URL 地址,第二个是本地文件的路径i += 1

绘制折线图函数,将列表中前10个电影名称,评分,评价人数按xy轴画折线图

mpl.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体,SimHei为黑体movies = movies[:10]  # 取排名前十eval_num = eval_num[:10]rating = rating[:10]movies = movies[::-1]#切片eval_num = eval_num[::-1]rating = rating[::-1]fig, ax1 = plt.subplots()  #返回一个包含一个 Axes 对象的 tuple,Axes 对象被赋值给了变量 ax1fig.set_size_inches(10, 7)  # 设置画布的尺寸ax2 = ax1.twinx() ax1.plot(movies, eval_num, color='blue', label='评价数', marker='o')ax1.set_xlabel('电影名称', fontsize=16)  # 设置x轴标签的文本内容#字体高度ax1.set_ylabel('评价数', color='blue', fontsize=16)  # 设置y轴标签的文本内容ax1.tick_params(axis='y', labelcolor='blue')  # axis='y' 表示设置y轴的刻度线和刻度标签ax1.legend(loc='upper left')  # 将标签的位置设置在画布顶部中央ax2.plot(movies, rating, color='red', label='评分', marker='^')ax2.set_ylabel('评分', color='red', fontsize=16)  # 设置y轴标签的文本内容ax2.tick_params(axis='y', labelcolor='red')ax2.spines['right'].set_position(('axes', 1))ax2.legend(loc='upper center')plt.title('电影评价数及评分折线图', fontsize=18)  # 设置标题plt.show()

调用存储电影信息文件,在网页选择整个电影,获取html.xpath,再用相同的方法,获取电影名、导演和演员、评分、排名、简介等信息的xpath,在程序中处理得到我们想要的数据并打印,然后存入豆瓣top250.csv文件,下方调用函数绘制折线图。

html = etree.HTML(res.text)lis = html.xpath('//*[@id="content"]/div/div[1]/ol/li')  # 整个电影的信息movies = []  # 电影名称列表eval_num = []  # 评价数列表rating = []  # 评分列表for li in lis:title = li.xpath(' ./ div / div[2] / div[1] / a / span[1]/text()')[0]link = li.xpath('./div/div[2]/div[1]/a/@href')[0]  # href超链接director = li.xpath('./div/div[2]/div[2]/p[1]/text()')[0].strip()  score = li.xpath('./div/div[2]/div[2]/div/span[2]/text()')[0] peonum = li.xpath('./div/div[2]/div[2]/div/span[4]/text()')[0]intd = getintd(li)  # 有些电影没有简介返回空列表报错:list index out of rangeprint(title, link)print(director)print('评分:', score)print('评价人数:', ''.join(filter(str.isdigit, peonum)))  # 只保留数字print('简介:', intd)movies.append(title)eval_num.append(''.join(filter(str.isdigit, peonum)))rating.append(score)with open("./豆瓣top250.csv.", 'a', newline="", encoding='utf-8-sig') as fp:  writer = csv.writer(fp)writer.writerow((title, link, director, score, peonum, intd))if i == 0:movie_visual(movies, eval_num, rating)

4.3 效果展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5. 总结

在这次数据获取与预处理实训中,我学到了对request库的运用,以及Python中调用各种库的便利,同时也加强了我通过使用lxml中etree对爬取到的数据进行Xpath解析的运用。也学会了分析爬取页面的方法以及数据提取的方法。对于爬虫这项技术我表现出很大的热情,我觉得这项技术非常实在有用,当然我们也不能违背法律,要合理运营爬虫。

注:本人承诺本次课题中爬取的数据都是公开数据,取得数据的手段合法,项目中爬取取得的所有数据仅供学习使用非商用,且没有对网站造成伤害 。

相关文章:

Python课设-谁为影狂-豆瓣数据【数据获取与预处理课设】

🏆 作者简介:席万里 ⚡ 个人网站:https://dahua.bloggo.chat/ ✍️ 一名后端开发小趴菜,同时略懂Vue与React前端技术,也了解一点微信小程序开发。 🍻 对计算机充满兴趣,愿意并且希望学习更多的技…...

关卡选择与布局器

unity布局管理器 使用unity布局管理器轻松对关卡选择进行布局。 实现过程 准备普通按钮button设置字体和对应的sprite设置父gameobject(levelbase) 再创建UI.image(selectbackground)布局背景和大小gameobject(grid…...

评估一套呼叫中心大模型呼出机器人的投入回报比?

评估一套呼叫中心大模型呼出机器人的投入回报比? 原作者:开源呼叫中心FreeIPCC,其Github:https://github.com/lihaiya/freeipcc 评估一套呼叫中心大模型呼出机器人的投入回报比(ROI),是一个涉…...

面向对象的 CLI:使用 Fire 简化类和对象的方法暴露 (中英双语)

面向对象的 CLI:使用 Fire 简化类和对象的方法暴露 在传统的命令行工具开发中,argparse 是最常用的库之一,用于处理命令行参数和配置。它通常用于函数式编程,但在处理类和对象时,使用起来可能不如 Fire 方便。Fire 是…...

flutter控件buildDragTargetWidget详解

文章目录 1. DragTarget 的核心概念基本属性 2. 基本用法3. 使用 buildDragTargetWidget4. 常见场景5. 注意事项 buildDragTargetWidget 不是 Flutter 中的内置 API 或方法,但根据命名习惯,它很可能是您正在实现或使用的一个方法,用于在 Flut…...

使用webrtc-streamer查看实时监控

摄像头配置(海康摄像头为例) 摄像头视频编码应改成H264格式 webrtc-streamer下载 webrtc-streamer下载地址 下载后解压出来双击运行,端口默认8000 VUE2项目引入文件 在项目静态文件“public”中需引入两个js文件“webrtcstreamer.js”与“…...

【数据分享】2014-2024年我国POI兴趣点数据(免费获取/来源于OSM地图)

POI是Point of Interest的简称,意为“兴趣点”,是互联网电子地图中用于表示特定位置的地理实体的核心数据类型。POI通常用于标注具体地点,例如餐厅、商场、学校、医院、景点等。这些数据以点的形式呈现,并附带详细属性信息&#x…...

Leetcode 3389. Minimum Operations to Make Character Frequencies Equal

Leetcode 3389. Minimum Operations to Make Character Frequencies Equal 1. 解题思路2. 代码实现 题目链接:3389. Minimum Operations to Make Character Frequencies Equal 1. 解题思路 这一题从答题从test的结果来说来说做出的人很少,主要确实有些…...

Vite 与 Webpack 的区别

在前端开发中,构建工具是不可或缺的,Webpack 和 Vite 是当前最流行的选择之一。尽管它们的目标相似,但在实现方式和开发体验上却有显著差异。本文将探讨 Vite 和 Webpack 的主要区别,以便于根据项目需求选择合适的工具。 1. 构建…...

基于32单片机的RS485综合土壤传感器检测土壤PH、氮磷钾的使用(超详细)

1-3为RS485综合土壤传感器的基本内容 4-5为基于STM32F103C8T6单片机使用RS485传感器检测土壤PH、氮磷钾并显示在OLED显示屏的相关配置内容 注意:本篇文件讲解使用的是PH、氮磷钾四合一RS485综合土壤传感器,但里面的讲解内容适配市面上的所有多合一的RS…...

【从零开始入门unity游戏开发之——C#篇11】一个标准 C# 程序介绍、新的值类型——枚举

文章目录 一、一个标准 C# 程序1、文件名(Program.cs):2、 using 语句:3、命名空间(namespace)4、类(class):4、入口函数(Main 方法)5、程序运行流…...

vue 签名校验 md5 uuid

import CryptoJS from crypto-js import uuid from /utils/uuid import { SECRET_KEY } from /utils/config // 签名校验 const nonceStr uuid.uuid() const timestamp new Date().getTime() // const sign CryptoJS.MD5(nonceStr nonceStr &secretKey SECRET_KEY …...

CSS系列(16)-- 架构与模式详解

前端技术探索系列:CSS 架构与模式详解 🏗️ 致读者:探索 CSS 架构的艺术 👋 前端开发者们, 今天我们将深入探讨 CSS 架构与设计模式,学习如何构建可维护的样式系统。 CSS 架构方法论 🚀 OO…...

【go语言】reflect包与类型推断

reflect 包的核心概念 Go 中的反射涉及两个核心概念: Type:表示一个类型的结构体,reflect.Type 是类型的描述。Value:表示一个值的结构体,reflect.Value 是一个具体值的包装。 反射让我们能够动态地访问对象的类型和…...

3.python运算符

Python 提供了多种运算符,用于执行算术、比较、逻辑等各种操作。以下是 Python 中常见的运算符类型及其用法: 文章目录 1. 算术运算符2. 比较运算符3. 逻辑运算符4. 赋值运算符5. 位运算符6. 成员运算符7. 身份运算符8. 运算符优先级 1. 算术运算符 算…...

【竞技宝】CS2-上海major:spirit力克MOUZ niko梦碎

北京时间2024年12月15日,CS2上海major正在如火如荼的进行中,昨日迎来两场半决赛MOUZ对阵spirit以及FAZE对阵G2。Spirit和MOUZ和各自赢下了自己的选图之后,spirit双子星在图三抗住压力帮助队伍杀入决赛。而G2和FAZE的比赛中,FAZE依然延续上一场的火热手感完全压制了G2,G2的明星选…...

【Leetcode 每日一题】3266. K 次乘运算后的最终数组 II

问题背景 给你一个整数数组 n u m s nums nums,一个整数 k k k 和一个整数 m u l t i p l i e r multiplier multiplier。 你需要对 n u m s nums nums 执行 k k k 次操作,每次操作中: 找到 n u m s nums nums 中的 最小 值 x x x&a…...

etcd集群常见日志

1、节点失去领导者 {"level":"info","ts":"2024-05-07T01:54:04.948Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"raft.node: 9afce9447872453 lost le…...

【漫话机器学习系列】005.神经网络的结构(architecture on the neural network)

神经网络(Neural Network)是一种模拟人脑神经系统的计算模型,由大量相互连接的神经元(节点)组成,广泛应用于深度学习和机器学习领域。以下是神经网络的基本结构及关键组成部分。 1. 神经网络的基本组成 一…...

基于 Couchbase 数据仓库元数据管理的可行性方案

在大数据体系中,元数据管理是数据治理的关键一环。以下是一套元数据管理的可行性方案,适合你的当前架构设计(基于 Couchbase 数据仓库)并支持高效管理数据的分层与结构。 1. 元数据管理的目标 统一数据管理:清晰描述 …...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线, n r n_r nr​ 根接收天线的 MIMO 系…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...