作业四

news/2024/11/14 10:50:35/文章来源:https://www.cnblogs.com/wujiahui/p/18542297

作业一

要求:
▪ 熟练掌握 Selenium 查找 HTML 元素、爬取 Ajax 网页数据、等待 HTML 元素等内
容。
▪ 使用 Selenium 框架+ MySQL 数据库存储技术路线爬取“沪深 A 股”、“上证 A 股”、
“深证 A 股”3 个板块的股票数据信息。
o 候选网站:东方财富网:
http://quote.eastmoney.com/center/gridlist.html#hs_a_board
o 输出信息:MYSQL 数据库存储和输出格式如下,表头应是英文命名例如:序号
id,股票代码:bStockNo……,由同学们自行定义设计表头
部分关键代码

def insert_stock_data(cursor, stock_data):cursor.execute("""INSERT INTO stocks (股票代码, 股票名称, 最新价, 涨跌幅, 涨跌额, 成交量, 成交额, 振幅, 最高, 最低, 今开, 昨收) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)""", (stock_data['股票代码'], stock_data['股票名称'], stock_data['最新价'], stock_data['涨跌幅'],stock_data['涨跌额'], stock_data['成交量'], stock_data['成交额'], stock_data['振幅'],stock_data['最高'], stock_data['最低'], stock_data['今开'], stock_data['昨收']))

这部分代码用于将爬取到的股票数据按照顺序填入表格

# 爬取所有页的数据
data = []# 假设页面最多会翻10页,可以根据需要修改
page = 1
while True:# 获取当前页面的所有股票数据rows = driver.find_elements(By.XPATH, "//table[@id='table_wrapper-table']/tbody/tr")# 如果没有数据,停止爬取if not rows:print("没有更多数据,停止爬取。")break# 遍历每一行,提取股票信息for row in rows:cols = row.find_elements(By.TAG_NAME, "td")if len(cols) > 1:stock_data = {'股票代码': cols[1].text,  # 股票代码'股票名称': cols[2].text,  # 股票名称'最新价': float(cols[4].text.replace(",", "")) if cols[4].text else 0.0,  # 最新价'涨跌幅': float(cols[5].text.replace("%", "")) if cols[5].text else 0.0,  # 涨跌幅'涨跌额': float(cols[6].text.replace(",", "")) if cols[6].text else 0.0,  # 涨跌额'成交量': parse_volume(cols[7].text),  # 使用parse_volume函数处理成交量'成交额': parse_amount(cols[8].text),  # 使用parse_amount函数处理成交额'振幅': float(cols[9].text.replace("%", "")) if cols[9].text else 0.0,  # 振幅'最高': float(cols[10].text.replace(",", "")) if cols[10].text else 0.0,  # 最高'最低': float(cols[11].text.replace(",", "")) if cols[11].text else 0.0,  # 最低'今开': float(cols[12].text.replace(",", "")) if cols[12].text else 0.0,  # 今开'昨收': float(cols[13].text.replace(",", "")) if cols[13].text else 0.0  # 昨收}data.append(stock_data)# 将数据插入到数据库insert_stock_data(cursor, stock_data)# 等待翻页按钮可点击try:WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='next']")))# 点击翻页按钮,加载下一页数据next_button = driver.find_element(By.XPATH, "//a[@class='next']")next_button.click()# 等待页面加载time.sleep(3)page += 1if page > 10:  # 假设只爬取前10页print("爬取结束,已到达最大页数。")breakexcept Exception as e:print(f"翻页失败或超时: {e}")break  # 如果发生任何异常则停止翻页

这部分代码用于爬取网站的相关股票数据
结果展示
image
image
image
心得体会
在这次数据爬取和数据库存储的过程中,我学到了很多关于如何使用 Selenium 和 MySQL 进行数据抓取和管理的知识。通过使用 Selenium,能够模拟浏览器操作,自动化地从网页上提取数据,这对处理大量网页内容和需要频繁更新的数据尤为重要。此外,使用 MySQL 来存储数据,不仅提高了数据的持久性,还方便了后续的数据分析和处理。通过设置字符集为 utf8mb4,确保了中文数据的正确存储和显示。
在处理页面翻页时,利用 WebDriverWait 和 EC.element_to_be_clickable 等 Selenium 技巧,提高了程序的稳定性和效率。对成交量和成交额等数据的处理,也通过自定义函数进行转换和解析,使得数据能够符合数据库存储的标准。这次实践让我对如何处理网页抓取、数据解析、数据库操作有了更深入的了解。
同时,在设计数据库时,采用中文列名,使得数据更加易于理解和管理。尽管过程中遇到了一些挑战,如翻页失败和超时问题,但通过不断调试和优化,最终顺利完成了任务。总体来说,这次经历不仅让我加深了对数据抓取技术的理解,也提高了我在实际项目中应用技术的能力。

作业二

要求:
熟练掌握 Selenium 查找HTML元素、实现用户模拟登录、爬取Ajax网页数据、等待HTML元素等内容。
使用Selenium框架+MySQL爬取中国mooc网课程资源信息(课程号、课程名称、学校名称、主讲教师、团队成员、参加人数、课程进度、课程简介)
候选网站:中国mooc网:https://www.icourse163.org
输出信息:MYSQL数据库存储和输出格式
部分核心代码展示

# 打开 iCourse163 网站
driver.get('https://www.icourse163.org/')
time.sleep(1)# 定位并点击登录按钮
button = driver.find_element(By.XPATH, '//*[@id="app"]/div/div/div[1]/div[3]/div[3]/div')
button.click()
time.sleep(1)# 切换到登录 iframe
frame = driver.find_element(By.XPATH, "//div[@class='ux-login-set-container']//iframe")
driver.switch_to.frame(frame)

这部分用于模拟用户登录到mook平台

# 获取课程链接元素列表
link_list = driver.find_elements(By.XPATH, '//div[@class="u-clist f-bgw f-cb f-pr j-href ga-click"]')# 遍历课程链接元素列表
for link in link_list:# 获取课程名称course_name = link.find_element(By.XPATH, './/span[@class=" u-course-name f-thide"]').text# 获取学校名称school_name = link.find_element(By.XPATH, './/a[@class="t21 f-fc9"]').text# 获取主讲老师teacher = link.find_element(By.XPATH, './/a[@class="f-fc9"]').texttry:# 获取教师团队成员team_member = link.find_element(By.XPATH, './/span[@class="f-fc9"]/span').textteam_member = teacher + ' 、' + team_memberexcept Exception:team_member = 'none'# 获取参加人数并去除'参加'字样attendees = link.find_element(By.XPATH, './/span[@class="hot"]').text.replace('参加', '')# 获取课程进度process = link.find_element(By.XPATH, './/span[@class="txt"]').text# 获取课程简介introduction = link.find_element(By.XPATH, './/span[@class="p5 brief f-ib f-f0 f-cb"]').text# 将数据插入 MySQL 数据库cursor.execute('''INSERT INTO courses (课程名称, 学校名称, 老师, 教师团队, 参加人数, 课程进度, 课程简介)VALUES (%s, %s, %s, %s, %s, %s, %s)''', (course_name, school_name, teacher, team_member, attendees, process, introduction))conn.commit()

这部分用于爬取mook的课程内容
运行结果image
心得体会
在进行数据库操作和使用 Selenium 自动化抓取网页数据的过程中,我深入体会到了编程与实际应用结合的重要性。首先,在进行数据抓取时,我意识到网页结构的复杂性和动态加载内容的挑战,使用 Selenium 时切换 iframe 和等待元素加载是非常关键的步骤。这让我对网页的 DOM 结构和网络请求有了更深的理解。
其次,在使用 MySQL 存储抓取的数据时,我发现数据库设计的重要性。通过合理的表结构和数据类型的选择,不仅能保证数据存储的效率,还能提高后续查询和管理的便捷性。我还意识到,面对不同数据库(如 MySQL 和 SQLite)时,连接方式、查询语法和权限管理会有些许差异,因此需要根据实际需求灵活调整。
此外,通过实际操作,我对编程中常见的问题和错误有了更多的应对经验。例如,遇到库或驱动版本不匹配时,如何快速定位问题并解决,如何调试程序的每一步操作,这些经验对于提高开发效率非常有帮助。
总的来说,通过实践,我不仅提高了编程技能,还对如何高效地从网页抓取数据并进行存储和分析有了更深的理解。这将为未来更多的项目和挑战打下坚实的基础。

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

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

相关文章

ATE测试 - STDF文件分析 - Excel报表格式探讨

1、转换对象:STDF文件 2、适用人员:TE 或 解决方案人员 或 需要对测试项TestItem原始测试值进行分析的 2、Excel格式:如下示意图4、局限性:Excel一个sheet中,列数最大不能超过16384列,行数最大不能超过1048576行,因此这种格式对于超过16384颗Die的文件就无法生成Excel文…

实验一:百度机器翻译SDK实验(2024.11.15日完成)

实验一:百度机器翻译SDK实验(2024.11.15日完成)任务一:下载配置百度翻译Java相关库及环境(占10%)。任务二:了解百度翻译相关功能并进行总结,包括文本翻译-通用版和文本翻译-词典版(占20%)。任务三:完成百度翻译相关功能代码并测试调用,要求可以实现中文翻译成英文,…

2024.11.12 NOIP模拟 - 模拟赛记录

Preface 一套烂题。 T1 一眼搬的 CF(赛后十秒就找到原题了),只搬 idea 就算了,根本不设置部分分,大样例给的更是一坨(数据范围给的 \(10^{15}\),1 2 10 72 121 算什么大样例?),甚至最后的题解都是直接复制的洛谷。 T2 稍好,除了实数运算稍微恶心一点,其它都没什么。…

数据采集与融合技术作业四

目录作业①实验要求及结果心得体会作业②实验要求及结果心得体会作业③实验要求及结果心得体会码云连接作业① 实验要求及结果要求 熟练掌握 Selenium 查找HTML元素、爬取Ajax网页数据、等待HTML元素等内容。 使用Selenium框架+ MySQL数据库存储技术路线爬取“沪深A股”、“上证…

[转贴]在前端如何玩转 Word 文档

在日常工作中,大部分人都会使用 Microsoft Office Word、WPS 或 macOS Pages 等文字处理程序进行 Word 文档处理。除了使用上述的文字处理程序之外,对于 Word 文档来说,还有其他的处理方式么?答案是有的。 接下来阿宝哥将介绍在前端如何玩转 Word 文档,阅读本文之后,你将…

AI之旅:起步即迈出重要一步,博客园与 Chat2DB 达成战略合作

在技术变革的路上,我们不会孤单。我们与博客园的合作,只是一个开始。未来,更多的技术人将加入这场旅程,共同书写AI时代的开发者新篇章。我们希望,这条路上的每一个人,都能够在智能工具与温暖社区的双重支持下,走得更远、飞得更高AI之旅开篇之后的第一篇本准备写一篇简单…

深入理解MySQL索引的底层原理和优化

深入理解MySQL索引的底层原理和优化 1. 什么是索引 索引是帮助MySQL高效获取数据的排好序的数据结构。用于提高查询性能,相当于书的目录。比如我们在读一本书的时候,首先是通过目录来定位到文章的页码,然后通过页码再来快速定位到具体的内容。MySQL中也是一样,在查询数据的…

攻防世界-mfc逆向

文件被加了vmp,静态分析难度很大运行程序 发现是mfc框架程序,根据提示应该在控件里去找,可以用xspy进行分析 发现窗口句柄中有一串密文944c8d100f82f0c18b682f63e4dbaa207a2f1e72581c2f1b,并且发现一条特殊的onMsgOnMsg:0464,func= 0x00402170(MFC1.exe+ 0x002170 ),它并不…

Lec 07 操作系统管理页表映射

lec 07 操作系统管理页表映射 0 Contents1 操作系统设置页表映射何时设置页表映射?操作系统自己使用的页表 -- 在启动时填写 -- 映射全部物理内存虚拟地址 = 物理地址 + 固定偏移(直接映射,Direct Mapping) 思考:为什么需要直接映射?应用进程的页表 -- 何时设置?2 立即映…

System.Data.SqlClient is not supported on this platform.

异常: 程序在修改了非数据库相关的代码后发布进行部分覆盖,抛出异常,本次并未覆盖数据库相关的dll 查询解决方案都给出的是,将本地的Microsoft.Data.SqlClient.dll拷贝到发布处覆盖,这种方式不行 本次原因: 之前发布是目标运行时选的“可移植”,部署地方还是保持可移植…

数据采集实验四

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