数据采集与融合技术实践课作业2

news/2024/10/22 21:28:48

数据采集与融合技术实践课第二次作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/2024DataCollectionandFusiontechnology
码云作业gitee仓库 https://gitee.com/huang-yuejia/DataMining_project/tree/master/work2
学号 102202142
姓名 黄悦佳

目录
  • 数据采集与融合技术实践课第二次作业
    • 一、作业内容
      • 作业①:
      • 1.爬取城市天气信息(代码在课程作业基础上改进优化)
      • 2.心得体会
      • 作业②:
      • 1.爬取股票信息(采用抓包方式)(作业2)
      • 2.心得体会
      • 作业③:
      • 1.爬取大学排名-抓包方式(作业3)
      • 2.心得体会
    • 二、作业总结
        • 难点与挑战:
        • 解决思路:
        • 新知识与收获:

一、作业内容

作业①:

  • 要求:在中国气象网(http://www.weather.com.cn)给定城市集的7日天气预报,并保存在数据库。

1.爬取城市天气信息(代码在课程作业基础上改进优化)

本作业源码链接:https://gitee.com/huang-yuejia/DataMining_project/blob/master/work2/2.1

  • 结果展示:

爬取过程

存储到数据库

  • 关键代码展示:
    输出爬取处理
    获取数据
    def fetch_weather_data(self, city):url = f"http://www.weather.com.cn/weather/{self.cityCode[city]}.shtml"try:req = urllib.request.Request(url, headers=self.headers)with urllib.request.urlopen(req) as response:data = response.read()dammit = UnicodeDammit(data, ["utf-8", "gbk"])return dammit.unicode_markupexcept Exception as e:print(f"Error fetching weather data for {city}: {e}")return None

处理数据

soup = BeautifulSoup(html_data, "lxml")lis = soup.select("ul[class='t clearfix'] li")for li in lis:try:date = li.select('h1')[0].text.strip()weather = li.select('p[class="wea"]')[0].text.strip()msg = li.select('')[0].text.strip()temp = li.select('p[class="tem"] span')[0].text.strip() + "/" + li.select('p[class="tem"] i')[0].text.strip()print(f"{city}, {date}, {weather},{msg}, {temp}")self.db.insert(city, date, weather,msg, temp)except Exception as e:print(f"Error processing data for {city}: {e}")

2.心得体会

  • 通过查找不同的城市代码筛选指点的城市信息,同时加入数据库的使用,使处理得到的数据能够更直观的展示,并便于下一步的处理分析。

作业②:

  • 要求:要求:用 requests 和 BeautifulSoup 库方法定向爬取股票相关信息,并存储在数据库中。

    1.爬取股票信息(采用抓包方式)(作业2)

本作业源码链接:https://gitee.com/huang-yuejia/DataMining_project/blob/master/work2/2.2

  • 结果展示:
    爬取过程

    存储到数据库

  • 关键代码展示:

提取json格式数据

  # 提取 JSON 数据json_str_start = response.text.index('(') + 1  # 找到 '(' 的位置json_str_end = response.text.rindex(')')  # 找到 ')' 的位置json_str = response.text[json_str_start:json_str_end]  # 提取 JSON 字符串# 解析 JSON 数据data = json.loads(json_str)# 检查数据是否成功读取if 'data' in data and 'diff' in data['data']:return data['data']['diff']else:print("数据格式不正确或未找到 'diff' 字段。")return []

通过f1,f2等参数获取信息

    if stock_data:# 提取所需字段并准备数据插入stocks = []for stock in stock_data:stock_code = stock.get('f12')  # 股票代码stock_name = stock.get('f14')  # 股票名称stock_price = stock.get('f2')   # 当前价格stock_change = stock.get('f4')   # 涨跌stock_trading_volume = stock.get('f5') #交易量stock_transaction = stock.get('f6')  #总交易金额stock_change_percent = stock.get('f10')  # 涨跌幅度

2.心得体会

  • 加深了对API数据抓取、JSON 解析、SQLite 数据库操作以及 Python 编程中模块化设计的理解。

作业③:

  • 要求:爬取中国大学 2021 主榜(https://www.shanghairanking.cn/rankings/bcur/2021)所有院校信息,并存储在数据库中,同时将浏览器 F12 调试分析的过程录制 Gif 加入至博客中
    本作业源码链接:https://gitee.com/huang-yuejia/DataMining_project/blob/master/work2/2.3

1.爬取大学排名-抓包方式(作业3)

  • 结果展示:

浏览器 F12 调试分析的过程录制

爬取过程

存储到数据库

  • 关键代码展示:

将地址数据由英文字符表示转换为中文(查阅资料修改)

#获取需要的数据
name = re.findall(',univNameCn:"(.*?)",', university_data)score = re.findall(',score:(.*?),', university_data)category = re.findall(',univCategory:(.*?),', university_data)province = re.findall(',province:(.*?),', university_data)
#对数据进行处理变换code_name = re.findall('function(.*?){', university_data)start_code = code_name[0].find('a')end_code = code_name[0].find('pE')code_name = code_name[0][start_code:end_code].split(',')value_name = re.findall('mutations:(.*?);', university_data)start_value = value_name[0].find('(')end_value = value_name[0].find(')')value_name = value_name[0][start_value + 1:end_value].split(",")universities = []for i in range(len(name)):#将实际信息存入province_name = value_name[code_name.index(province[i])][1:-1]category_name = value_name[code_name.index(category[i])][1:-1]print((i + 1, name[i], province_name, category_name, score[i]))universities.append((i + 1, name[i], province_name, category_name, score[i]))

2.心得体会

*部分信息不是直接将数据存储在其中,而是先通过其他更简介的方式标记,需要时再通过函数转化得到。例如本次作业中的学校地址,类型信息。通过这种方式,可以减少数据的传输量,存储量,提高效率。

二、作业总结

难点与挑战:

  • 复杂的网页结构与数据抓取
    网页中的数据经常被深藏在嵌套的标签或脚本中,尤其是学校排名和股票信息,需要分析网页的 DOM 结构,或者通过抓包分析找到数据源。提取信息时,需要精确选择合适的标签或使用正则表达式来解析非结构化的数据。
  • API 数据解析
    对于股票信息,数据通过 API 返回的 JSON 格式,需要准确地理解 JSON 数据的层次结构,并提取出关键信息进行处理和存储。

解决思路:

  • 抓包分析
    使用浏览器的开发者工具进行抓包分析,找出 API 请求和返回的格式,从中提取出数据的结构,设计相应的解析逻辑。
  • 数据处理与清洗
    在解析完 JSON 数据后,结合实际需要提取特定的字段,使用字典或映射表将代码转换为相应的文本信息,确保数据在存储之前已经处理完毕,满足后续使用的需求。

新知识与收获:

  • 深入掌握 HTML 和 CSS 的解析
    通过多次实践,增强了对 HTML 文档结构的理解,能更灵活地使用 BeautifulSoup 进行数据提取。学习了如何使用 CSS 选择器和 XPath 来选择特定节点,极大提高了提取效率。

  • API 调用与 JSON 数据处理
    对 API 数据的调用与 JSON 格式的解析有了更深刻的理解,掌握了如何从 JSON 数据中提取出嵌套字段,并将其转化为所需的格式。

  • 数据库的设计与操作
    在使用 SQLite 进行数据存储的过程中,理解了如何设计数据库表结构,如何高效地进行数据插入、更新和查询,进一步提高了数据的管理和使用效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/72224.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

公司网站系统内容修改?网站后台页面怎么修改?

要对公司网站系统的内容进行修改,通常需要通过网站的后台管理系统来完成。以下是具体步骤,假设你已经有访问后台的权限:登录后台管理:打开浏览器,输入网站后台管理系统的URL。 输入用户名和密码,点击登录。导航到内容管理:登录后,找到并点击“内容管理”或类似名称的菜…

(系列七).net8 Aop切面编程

说明该文章是属于OverallAuth2.0系列文章,每周更新一篇该系列文章(从0到1完成系统开发)。该系统文章,我会尽量说的非常详细,做到不管新手、老手都能看懂。说明:OverallAuth2.0 是一个简单、易懂、功能强大的权限+可视化流程管理系统。 友情提醒:本篇文章是属于系列文章,…

【日记】舞蹈是跟身体对话的一个过程(1451 字)

正文今天天气真好,天上一朵云都没有。本来上午就想着把被子拿出来晒,但想到中午还要睡觉,就变成下午了。晚上去收,发现被子上又落了一些桂花。想得很好,中午却几乎没有睡成觉。打游戏去了。中午过了黄眉。禁字诀真好用。都说难的第三阶段,我两次过。没什么人提起的第一阶…

网站密码忘记了怎么修改?

要修改网站的密码,通常可以按照以下步骤操作:访问登录页面:打开网站的登录页面。 寻找忘记密码选项:在登录表单附近通常会有一个“忘记密码”、“找回密码”或类似的链接。 输入注册邮箱或手机号:点击忘记密码链接后,系统会让你输入注册时使用的邮箱地址或手机号码。 查收…

怎么用admin后台修改网站?

要使用 admin 后台修改网站,通常可以按照以下步骤操作:登录后台管理系统:打开网站的管理后台 URL(例如 http://yourwebsite.com/admin)。 输入管理员用户名和密码进行登录。进入管理界面:登录后,你会看到后台管理界面,这里通常有各种管理功能和菜单项。选择要修改的内容…

模板类网站什么不能修改?网站信息在哪里修改密码?

对于模板类网站,有些内容可能无法直接修改,主要原因如下: 不能修改的内容核心代码:模板类网站的核心代码通常受到保护,不允许用户直接修改,以保证系统的稳定性和安全性。数据库结构:数据库结构通常也是固定的,不允许随意修改,以免破坏数据完整性。系统配置文件:一些关…

Project Euler 588 题解

down with copyright这玩意好像甚至有递推式……不太懂(为什么是图片?cnblogs 第一个公式没渲染成功) 时间复杂度是 \(O(4^{\deg F}\log K)\) 的。 #include<bits/stdc++.h> using namespace std; #define int long long const int maxn=100; int f[17][maxn],cur[10]…

闪迪SanDisk固态硬盘维修数据恢复

一、数据恢复方法 1.使用数据恢复——利用系统自带功能 对于Windows系统,可以尝试使用文件历史记录功能或撤销功能来恢复数据。 文件历史记录功能需要在之前已经开启并设置了备份。 撤销功能则适用于刚刚误删的文件,可以使用【Ctrl+Z】撤销删除组合快捷键或右键单击删除文件所…