102302104刘璇-数据采集与融合技术实践作业4

news/2025/12/5 20:29:48/文章来源:https://www.cnblogs.com/liuxuannn/p/19273750

作业1:

要求:熟练掌握 Selenium 查找 HTML 元素、爬取 Ajax 网页数据、等待 HTML 元素等内容。使用 Selenium 框架+ MySQL 数据库存储技术路线爬取“沪深 A 股”、“上证 A 股”、“深证 A 股”3 个板块的股票数据信息。
候选网站:东方财富网:

http://quote.eastmoney.com/center/gridlist.html#hs_a_board

输出信息:MYSQL 数据库存储和输出格式如下,表头应是英文命名例如:序号,id,股票代码:bStockNo……,由同学们自行定义设计表头:
序号 股票代码 股票名称 最新报价 涨跌幅 涨跌额 成交量 成交额 振幅 最高 最低 今开 昨收
1 688093 N世华 28.47 % 62.22 10.92 26.13万 7.6亿 22.34 32.08 28.02 30.25
核心代码设计逻辑:
  因为之前爬过很多次,所以用大模型设计了反爬驱动初始化伪装浏览器环境,去防止东方财富网的反爬机制;爬取的时候利用XPath定位表格元素,清洗数据转化为结构化字典;然后把数据存储到MySQL里面。
爬取的核心代码:
点击查看代码
# 反爬配置初始化Chrome驱动
options = Options()
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--disable-blink-features=AutomationControlled')
options.add_argument('--start-maximized')
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(options=options)
# 隐藏webdriver指纹(核心反爬)
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"
})
driver.implicitly_wait(15)
# 数据爬取解析
market_urls = {"上证A股": "http://quote.eastmoney.com/center/gridlist.html#sh_a_board","深证A股": "http://quote.eastmoney.com/center/gridlist.html#sz_a_board","沪深A股": "http://quote.eastmoney.com/center/gridlist.html#hs_a_board"
}
stocks_data = []
# 遍历爬取三大板块
for market_type in ["沪深A股", "上证A股", "深证A股"]:driver.get(market_urls[market_type])time.sleep(5)driver.execute_script("window.scrollTo(0, document.body.scrollHeight/2);")time.sleep(3)# 解析前20条数据for row in rows[:20]:cells = row.find_elements(By.TAG_NAME, "td")if len(cells) < 14: continuetry:stock_data = {'stock_code': cells[1].text.strip(),'stock_name': cells[2].text.strip(),'latest_price': float(cells[4].text.strip().replace(',', '')) if cells[4].text.strip() not in ['-','--'] else None,'change_percent': float(cells[5].text.strip().replace('%', '').replace(',', '')) if cells[5].text.strip() not in ['-','--'] else None,'change_amount': float(cells[6].text.strip().replace(',', '')) if cells[6].text.strip() not in ['-','--'] else None,'volume': int(float(cells[7].text.strip().replace('万', '').replace('亿', '0000').replace(',', '')) * 10000) if cells[7].text.strip() not in ['-', '--'] else None,'turnover': float(cells[8].text.strip().replace('万', '').replace('亿', '0000').replace(',', '')) * 10000 if cells[8].text.strip() not in ['-', '--'] else None,'market_type': market_type}if stock_data['stock_code'] and stock_data['stock_name']:stocks_data.append(stock_data)except:continue
存储在MySQL的核心代码:
点击查看代码
DB_CONFIG = {'host': 'localhost', 'user': 'root', 'password': 'qazplm2580', 'database': 'stock_market'}
# 插入/更新数据
insert_sql = """INSERT INTO stock_data (stock_code, stock_name, latest_price, change_percent, change_amount, volume, turnover, market_type)VALUES (%s, %s, %s, %s, %s, %s, %s, %s)ON DUPLICATE KEY UPDATE latest_price=VALUES(latest_price), change_percent=VALUES(change_percent), change_amount=VALUES(change_amount), volume=VALUES(volume), turnover=VALUES(turnover);
"""
for stock in stocks_data:cursor.execute(insert_sql, (stock['stock_code'], stock['stock_name'], stock['latest_price'],stock['change_percent'], stock['change_amount'], stock['volume'],stock['turnover'], stock['market_type']))
db.commit()
print(f"成功存储 {len(stocks_data)} 条数据")
cursor.close()
db.close()
运行结果:

4.1-1
4.1-2
4.1-3
4.1-4
4.1-5

Gitee文件夹链接:https://gitee.com/liuxuannn/data-acquistion-and-fusion-practice_-project1/blob/master/作业4/4.1.py
心得体会:
  爬取太多次后面就爬不出来有效数据了:先更换网络,然后问了一下大模型怎么样解决反爬的情况,重新添加反爬代码解决这个问题。
  数据库表里面无法查看数据:查看时选择了数据筛选窗口,对stock_market.stock_data表的数据进行条件过滤。但筛选条件中的id =后未填写具体数值,导致 SQL 语句不完整查看不了;取消筛选直接查看表数据。

作业2:

要求:熟练掌握 Selenium 查找 HTML 元素、实现用户模拟登录、爬取 Ajax 网页数据、等待 HTML 元素等内容。使用 Selenium 框架+MySQL 爬取中国 mooc 网课程资源信息(课程号、课程名称、学校名称、主讲教师、团队成员、参加人数、课程进度、课程简介)
候选网站:中国 mooc 网:https://www.icourse163.org
输出信息:MYSQL 数据库存储和输出格式
Id cCourse cCollege cTeacher cTeam cCount cProcess cBrief
1 Python数据分析与展示 北京理工大学 曹天 曹天 470 2020年11月17日 ~ 2020年12月29日 "我们正步入一个数据或许比软件更重要的新时代。-Tim O'Reilly"……
首先根据网页提取每一个需要课程信息的Xpath

4.2-1
4.2-2

核心代码设计逻辑:
  核心思路就是手动完成MOOC登录避免反爬问题后,批量遍历课程URL,通过之前提取的Xpath解析每个课程的名称、学校、教师、报名人数等关键信息,然后把这些数据存入MySQL数据库。
核心代码:
点击查看代码
def get_all_teachers():all_teachers = []def get_teachers_from_page():page_teachers = []try:# 定位教师头像元素(通过alt属性获取教师姓名)teacher_items = driver.find_elements(By.XPATH,"//div[@class='m-teachers_teacher-list']//img")for img in teacher_items:name = img.get_attribute("alt")  # 从alt属性提取教师姓名if name:page_teachers.append(name)except:passreturn page_teachers
……………………# 课程名称course_name = safe_text('//*[@id="g-body"]/div[1]/div/div/div/div[2]/div[2]/div/div[2]/div[1]/span[1]')# 开课学校名称(从学校logo的alt属性提取)try:school_img = driver.find_element(By.XPATH, '//*[@id="j-teacher"]/div/a/img')school_name = school_img.get_attribute("alt") or ""except:school_name = ""# 教师信息(拆分主讲教师和团队)teacher_list = get_all_teachers()teacher_main = teacher_list[0] if teacher_list else ""  # 主讲教师(第一个)teacher_team = ";".join(teacher_list[1:]) if len(teacher_list) > 1 else ""  # 教师团队(其余)# 课程简介、进度、报名人数intro = safe_text('//*[@id="j-rectxt2"]')          # 课程简介progress = safe_text('//*[@id="course-enroll-info"]/div/div[1]/div[2]/div/span[2]')  # 课程进度enroll_num = safe_text('//*[@id="course-enroll-info"]/div/div[1]/div[4]/span[2]')    # 报名人数# 课程ID(从URL拆分唯一标识)course_id = url.split("/")[-1]
运行结果:

4.2-3
4.2-4

Gitee文件夹链接:https://gitee.com/liuxuannn/data-acquistion-and-fusion-practice_-project1/blob/master/作业4/4.2.py
心得体会:
  最开始爬取的时候没有找到school_name和teacher_term,后来发现学校名字是来自老师头像的链接,用教室里面的第一位作为teacher_main,剩下的作为teacher_term。

作业3:

要求:(1)掌握大数据相关服务,熟悉 Xshell 的使用.(2)完成文档 华为云_大数据实时分析处理实验手册-Flume 日志采集实验(部分)v2.docx 中的任务。
输出信息:实验关键步骤或结果截图。

一.环境搭建

1.开通mapreduce服务

4.3-1开通mapreduce服务

2.绑定的弹性IP

4.3-2绑定的弹性IP

3.添加安全组规则

4.3-3添加安全组规则

二.实时分析开发实战

(一)Python 脚本生成测试数据

4.3-4Python 脚本生成测试数据

(二)配置 Kafka

4.3-5安装Kafka客户端1
4.3-5安装Kafka客户端2

(三)安装 Flume 客户端
1.安装Flume客户端

4.3-6安装Flume客户端1
4.3-6安装Flume客户端2

2.安装Flume运行环境

4.3-7安装Flume运行环境

3.重启Flume服务

4.3-8重启Flume服务

(四)配置 Flume 采集数据

4.3-9配置Flume采集数据

心得体会:
  通过实验了解了华为云MRS服务申请的基本流程;学会了如何使用Flume进行实时流前端数据采集,掌握了实时场景下,大数据的数据采集能力。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】服务器开启 ssh 服务 ssh 相关配置

✨ 操作系统 Ubuntu 24.04.3 LTS✨ 开启 ssh 服务 安装 ssh 服务 sudo apt update sudo apt install openssh-server -y检查 ssh 服务状态 sudo systemctl status ssh如果回显绿色则表示 ssh 服务已开启✨ 修改 ssh 端…

看马蜂猜人 2.0

整活NOIP2025 T2il void Dadd(int &a,int b){(a+=b)>=P?a-=P:0;} il int Add(int a,int b){int v=a+b;return v>=P?v-P:v;} il void Ddel(int &a,int b){(a-=b)<0?a+=P:0;}int R=min(mxr,rk[id[l]…

Meta 挖角苹果设计师,重塑 AI 硬件交互;健康追踪应用 Healthify 升级 AI 助手:实时语音与摄像头交互丨日报

开发者朋友们大家好:这里是 「RTE 开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的技术」、「有亮点的产品」、「有思考的文章」、「有态度…

国产操作系统凝思磐石4.x x86架构镜像下载

凝思磐石 国产linux操作系统 rocky4.2.40-x86_64-security-2014-07-04.iso https://pan.baidu.com/s/1nVBZEx4r7pt42MX79R-IbQ 提取码: z616 国产系统但是镜像叫做rocky linux,你说奇怪不奇怪?文件名称:rocky4.2.40…

2025 省选 炼石计划 梦熊模拟赛 记录

2025 炼石计划 梦熊模拟赛 记录 #1 总结 T1难难难难难。 T2T3唐爆了,(几乎)过了。 分数:0+90+(90)=180。 T1 怎么这么难,harddddd。 考虑找到连通块的直径的中心,然后奇偶分讨一下。 考虑奇数时,有唯一中心,…

LocalAI:一个免费开源的AI替代实用的方案,让创意更自由!

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

SFT微调

目录背景和价值1. 微调能不能降低幻觉?2. 为什么决策 Agent 最适合做微调?3. 决策 Agent 微调的数据怎么构造?A. 工具调用策略样本(非常关键)B. 拒答样本(降低幻觉特别有效)C. 多意图拆分样本(复杂问题拆解)4…

全面解析DoS攻击:防御策略与应急响应指南

本文深入探讨拒绝服务攻击的工作原理、三种主要攻击类型及对企业的影响,详细介绍了包括风险评估、攻击面缩减、第三方防护服务在内的多层次防护策略,并提供了包含升级流程和业务连续性措施的应急响应计划。如何防范D…

要提高脑电模型的准确性,就必须让模型学会“无视个体差异”,抓住真正稳定、跨人的特征。

🧠 一、为什么脑电难? 脑电 EEG 有三大“不稳定”: 1)不同时间:电极位置轻微挪动、皮肤状况不同 2)不同人:头型、脑沟、皮肤阻抗都不同 3)同一个人:疲劳、情绪、生理状态不同 所以“原始 EEG”是非常漂的,不…

AI如何赋能游戏,为所有玩家创造更佳体验

本文探讨人工智能如何通过辅助工具和动态难度调整等技术,提升游戏的可访问性与个性化体验,使其更适应不同能力玩家的需求。当某中心揭晓"Project Gameface"时,该公司自豪地展示了一款无需手部操作、由AI驱…

cnn/rnn/Transformer

特征 CNN RNN Transformer看数据方式 看一小块 按顺序看 一次全看优势 提空间特征 处理时序 全局相关性强、效果最好速度 快 慢(逐步计算) 很快(并行)适合EEG 图空间、频率 短序列、时序 长序列、多导联、跨人任务…

PbootCMS网站转移后无法打开报错提示“No input file specifed”

在将 PbootCMS 网站迁移到新环境后,如果出现“No input file specified”错误,通常是由于服务器配置或文件问题导致的。以下是解决该问题的具体方法:1. 检查根目录中的 .user.ini 文件原因:.user.ini 文件可能包含…

kanass零基础学习,项目负责人如何启用kanass驾驭项目

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

意义的行为化:AI时代法律体系的数字通译与演进之道

意义的行为化:AI时代法律体系的数字通译与演进之道 摘要 人工智能技术的深度应用正在引发法律治理范式的历史性重构。本文提出“意义行为原生”这一核心范式,主张数字时代的法律效力,必须源自其价值能被系统性地编译…

讲一讲 Transformer 在脑电 EEG 里的作用

脑电 EEG 有这些特性: 多通道(空间关系) 多时间点(时序关系) 变化不稳定(跨被试困难) Transformer 特别适合 EEG,因为: ✔(1)可以捕捉长时间依赖 一些脑电特征跨几十甚至几百毫秒才出现。 ✔(2)能自动关注…

贪心算法之: 田忌赛马

贪心算法: 1、 电池寿命 http://bailian.openjudge.cn/practice/3468 2、 建立雷达 http://bailian.openjudge.cn/practice/1328 3、 田忌赛马 http://bailian.openjudge.cn/practice/2287 “田忌赛马(Tian Ji — T…

laya给自己画边框

laya给自己画边框laya给自己画边框this.graphics.drawRect(0,0,this.width,this.height, "#ccff00", "#ff0000", 2)this.graphics.strokeText(id + "", 30, 0, "", "#ff…

小游戏联机服务开发实践:从零构建房间匹配与帧同步系统

一、小游戏平台联机服务现状分析 在探索小游戏开发领域时,我发现一个有趣的现象:各大小游戏平台的联机服务支持程度差异显著。 如,微信小游戏官方提供了完整的房间匹配与帧同步服务,而抖音小游戏则暂未提供类似功能…

Object类

1.toString() 在一般的javabean类(也就是实体类)里面,可以重写toString方法(alt + insert),使得打印对应对象时,直接打印出对象的信息,而不是对象地址