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

news/2024/11/17 23:06:08/文章来源:https://www.cnblogs.com/Endorpings-m/p/18551345
这个作业属于哪个课程 <首页 - 2024数据采集与融合技术实践 - 福州大学 - 班级博客 - 博客园 (cnblogs.com)>
这个作业要求在哪里 <作业4 - 作业 - 2024数据采集与融合技术实践 - 班级博客 - 博客园 (cnblogs.com)>
学号 <102202101>

一、作业内容

作业①

  • 要求:

  • 熟练掌握 Selenium 查找HTML元素、爬取Ajax网页数据、等待HTML元素等内容。

  • 使用Selenium框架+ MySQL数据库存储技术路线爬取“沪深A股”、“上证A股”、“深证A股”3个板块的股票数据信息

  • 代码如下

点击查看代码
# 爬取一个页面的数据
def spiderOnePage():time.sleep(3)trs = driver.find_elements(By.XPATH,'//table[@id="table_wrapper-table"]//tr[@class]')for tr in trs:tds = tr.find_elements(By.XPATH,'.//td')num = tds[0].textid = tds[1].textname = tds[2].textLatest_quotation = tds[6].textChg = tds[7].textup_down_amount = tds[8].textturnover = tds[9].texttransaction_volume = tds[10].textamplitude = tds[11].texthighest = tds[12].textlowest = tds[13].texttoday = tds[14].textyesterday = tds[15].textcursor.execute('INSERT INTO stockT VALUES ("%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s")' % (num,id,name,Latest_quotation,Chg,up_down_amount,turnover,transaction_volume,amplitude,highest,lowest,today,yesterday))db.commit()
  • 输出信息:



  • Gitee文件夹链接:https://gitee.com/ma-xin1/data-acquisition/blob/master/作业4/task1.py

  • 心得体会:

    1. 使用 Selenium 控制浏览器进行爬取
      浏览器配置:通过 ChromeOptions 设置浏览器选项,禁用 GPU 加速,并通过 binary_location 指定 Chrome 浏览器的路径。通过 ChromeService 和指定 chromedriver.exe 来初始化浏览器驱动。
      自动化操作:代码模拟了用户的浏览器操作,访问不同的网页链接(如行情中心、沪深京A股等),并通过 WebDriverWait 等待页面加载完成后继续操作。这种方式使得爬虫能够动态加载页面内容(如股票数据),适应现代网站的 Ajax 加载模式。
      分页爬取:通过点击下一页按钮,循环爬取多页数据,并在每次爬取后等待页面加载完成。
    1. 数据库操作
      连接 MySQL:通过 pymysql 连接到本地 MySQL 数据库,创建一个名为 stockT 的表来存储股票数据。如果表已存在,先删除再重新创建。
      插入数据:每爬取一页股票数据,就将提取到的数据逐条插入到 MySQL 数据库中。使用 SQL 语句进行插入,并在每次插入后通过 db.commit() 提交事务,确保数据持久化。
    1. 网页解析
      XPath 定位:通过 XPath 定位页面元素,如通过 find_elements(By.XPATH, '//table[@id="table_wrapper-table"]//tr[@class]') 找到所有表格行,从中提取股票信息。
      数据提取:从每一行表格中提取多个数据字段(如股票编号、名称、最新报价等),并进行存储。需要注意,数据提取过程中可能遇到一些无效或格式不正确的数据,因此可以加入异常处理或数据清洗步骤。
    1. 多次访问不同页面
      代码通过 driver.get() 方法分别访问不同的网页,比如沪深A股、上证A股、深证A股等,爬取不同页面的股票数据。每爬取完一页数据后,会通过 driver.back() 返回到上一页面,然后继续爬取其他页面数据。这种结构使得爬虫能够获取多种股票板块的数据。
    1. 潜在的改进和问题
      错误处理:在数据库连接和操作时,应该加上更多的错误处理。例如,数据库连接失败、表创建失败或数据插入失败时的异常处理。
      数据清洗:在插入数据前,可以对爬取的数据进行更严格的检查和清洗,避免无效数据或空值被存入数据库。
      延时优化:虽然代码通过 time.sleep() 做了延时处理,但在爬取大量页面时,固定时间的等待可能会导致效率低下。可以考虑使用 WebDriverWait 来等待页面元素加载完成,而非简单地等待固定时间。
      可扩展性:目前的代码只爬取了几页数据,如果需要爬取大量数据,可能需要增加分页控制,处理不同网站结构或反爬虫机制的情况。

    作业②

  • 要求

  • 熟练掌握 Selenium 查找HTML元素、实现用户模拟登录、爬取Ajax网页数据、等待HTML元素等内容。

  • 使用Selenium框架+MySQL爬取中国mooc网课程资源信息(课程号、课程名称、学校名称、主讲教师、团队成员、参加人数、课程进度、课程简介)

  • 代码如下

点击查看代码
# 爬取一个页面的数据
def spiderOnePage():time.sleep(5)  # 等待页面加载完成courses = driver.find_elements(By.XPATH, '//*[@id="channel-course-list"]/div/div/div[2]/div[1]/div')current_window_handle = driver.current_window_handlefor course in courses:cCourse = course.find_element(By.XPATH, './/h3').text  # 课程名cCollege = course.find_element(By.XPATH, './/p[@class="_2lZi3"]').text  # 大学名称cTeacher = course.find_element(By.XPATH, './/div[@class="_1Zkj9"]').text  # 主讲老师cCount = course.find_element(By.XPATH, './/div[@class="jvxcQ"]/span').text  # 参与该课程的人数cProcess = course.find_element(By.XPATH, './/div[@class="jvxcQ"]/div').text  # 课程进展course.click()  # 点击进入课程详情页,在新标签页中打开Handles = driver.window_handles  # 获取当前浏览器的所有页面的句柄driver.switch_to.window(Handles[1])  # 跳转到新标签页time.sleep(5)  # 等待页面加载完成# 爬取课程详情数据# cBrief = WebDriverWait(driver,10,0.48).until(EC.presence_of_element_located((By.ID,'j-rectxt2'))).textcBrief = driver.find_element(By.XPATH, '//*[@id="j-rectxt2"]').textif len(cBrief) == 0:cBriefs = driver.find_elements(By.XPATH, '//*[@id="content-section"]/div[4]/div//*')cBrief = ""for c in cBriefs:cBrief += c.text# 将文本中的引号进行转义处理,防止插入表格时报错cBrief = cBrief.replace('"', r'\"').replace("'", r"\'")cBrief = cBrief.strip()# 爬取老师团队信息nameList = []cTeachers = driver.find_elements(By.XPATH, '//div[@class="um-list-slider_con_item"]')for Teacher in cTeachers:name = Teacher.find_element(By.XPATH, './/h3[@class="f-fc3"]').text.strip()nameList.append(name)# 如果有下一页的标签,就点击它,然后继续爬取nextButton = driver.find_elements(By.XPATH, '//div[@class="um-list-slider_next f-pa"]')while len(nextButton) != 0:nextButton[0].click()time.sleep(3)cTeachers = driver.find_elements(By.XPATH, '//div[@class="um-list-slider_con_item"]')for Teacher in cTeachers:name = Teacher.find_element(By.XPATH, './/h3[@class="f-fc3"]').text.strip()nameList.append(name)nextButton = driver.find_elements(By.XPATH, '//div[@class="um-list-slider_next f-pa"]')cTeam = ','.join(nameList)driver.close()  # 关闭新标签页driver.switch_to.window(current_window_handle)  # 跳转回原始页面try:cursor.execute('INSERT INTO courseMessage VALUES ("%s","%s","%s","%s","%s","%s","%s")' % (cCourse, cCollege, cTeacher, cTeam, cCount, cProcess, cBrief))db.commit()except Exception as e:print(e)
  • 输出信息:

  • Gitee文件夹链接:https://gitee.com/ma-xin1/data-acquisition/blob/master/作业4/task2.py

  • 心得体会:

  • 1.使用 Selenium 库的合理性:
    借助selenium库来自动化操作浏览器,能够很好地应对需要与动态网页交互的场景。例如在点击课程进入详情页、处理页面加载等待以及翻页等操作上,selenium提供的诸如WebDriverWait等待机制(通过expected_conditions模块)、元素定位方法(By类结合XPATH等定位方式)等功能,使得代码可以灵活地应对网页不同状态下的元素获取和交互需求,有效模拟了用户在浏览器中的操作行为,增强了爬虫的通用性和稳定性。

  • 2.数据库交互部分:
    代码中使用pymysql库连接 MySQL 数据库,并且在开始时对数据表进行了合理的创建(如果不存在则创建)以及先删除旧表的处理,逻辑严谨。后续将爬取到的数据插入到数据库的操作也比较常规和清晰,通过构建合适的INSERT语句,把从网页获取到的各类课程信息准确地存储起来,方便后续的数据查询、分析和应用。

  • 3.数据处理细节:
    在处理爬取到的课程简介文本时,考虑到了可能存在的特殊字符(如引号)会影响插入数据库的情况,进行了转义处理,这种对数据细节的把控能有效避免因数据格式问题导致的插入报错,提高了数据存储的成功率和准确性。另外,在爬取教师团队信息时,对于存在分页展示教师的情况,通过循环点击 “下一页” 按钮并持续收集教师名字的方式,较为全面地获取了完整的教师团队信息,保证了数据的完整性。

  • 4.代码可改进之处
    代码结构与可读性:
    整体代码结构稍显混杂,虽然功能实现了,但把页面访问、数据爬取、数据库操作以及翻页逻辑等都放在一个大的脚本中,没有很好地进行模块化划分。例如,可以将不同功能的代码块提取成独立的函数,像把数据库连接和关闭操作封装成专门的函数、将翻页相关的逻辑独立出来等,这样能让代码结构更清晰,更易于理解和维护,后续如果需要扩展功能或者修改某一部分逻辑也更方便定位代码。

    作业③

  • 要求:

  • 掌握大数据相关服务,熟悉Xshell的使用

  • 完成文档 华为云_大数据实时分析处理实验手册-Flume日志采集实验(部分)v2.docx 中的任务,即为下面5个任务,具体操作见文档。

  • 环境搭建:
    任务一:开通MapReduce服务

  • 实时分析开发实战:
    任务一:Python脚本生成测试数据
    任务二:配置Kafka
    任务三: 安装Flume客户端
    任务四:配置Flume采集数据

任务一:Python脚本生成测试数据


任务二:配置Kafka



任务三: 安装Flume客户端


任务四:配置Flume采集数据

释放资源:

**心得体会:

  • 通过这次华为云大数据实时分析处理实验,收获颇丰。
    开通 MapReduce 服务,体会到云服务操作的规范便捷,为后续打基础。用 Python 脚本生成测试数据,感受到其在构造数据上的强大,也明白了数据质量等对分析的重要性。
    配置 Kafka,认识到它在数据流转中的关键作用,参数配置需谨慎。安装 Flume 客户端,提升了解决依赖、网络等问题的能力。配置 Flume 采集数据,深知细节决定成败。
    全程使用 Xshell 远程操作,深感其便利性与重要性。总之,此次实验提升了技能,加深了对大数据架构的理解,很有价值。

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

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

相关文章

第二天 项目冲刺

今日任务 完成后端数据库的设计 以及简单的结构搭建,学习新的技术,引入springsecurity作为权限认证,以及mybatis-plus简化开发效率 实际上学习起来也不太轻松,总是遇到一些错误,以及对原理的学习还是比较费时间部分代码基本完成了各个小接口 前端选择了 这么一种风格 小结…

鸿蒙项目实战(四):编译器配置

一、设置每次运行直接覆盖安装,非卸载重装 Run->Edit Configurations-> 勾选 Keep Application Data 作者:听着music睡出处:http://www.cnblogs.com/xqxacm/Android交流群:38197636本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页…

团队项目冲刺——DAY3

团队项目冲刺——DAY3 每天举行站立式会议昨天已完成的工作成员 任务徐嘉炜 组织会议,说明项目进度,指导项目发展陈祥意 参与会议,简要讲述应用程序测试的各个模块林楦 参与会议,讲述有关功能界面的UI开发陈大锴 参与会议,协调开发技术与实际需求,记录需求蔡家显 参与会议…

关于本周学习ssm

本周学习完成了bean 注解开发 aop的基础知识(不过只达到了35节课,进度太慢),发现这部分知识比较依赖之前知识特别是mybatis的理解,其次就是反射机制和原理(这些东西之前没有看,因此总是在看的过程中去查补其他知识)。接下来会看一写博客或者csdn上文章来理解,就不再补充看…

Blender UV展开基本技巧

添加网格时自动生成UV在添加网格时,这里会提示是否帮你自动生成UV保持勾选,给模型添加材质,可以在UV编辑器中看到自动帮你展开好的UV手动展开UV新建一张贴图将UV编辑器和材质都添加上刚才新建好的那张贴图选中所有网格,按“U”,选择智能全选Blender就会自动帮我们上好贴图…

20222408 2024-2025-1 《网络与系统攻防技术》实验六实验报告

1.实验内容 1.1实验要求 (1)掌握metasploit、nmap的用法。 (2)学习前期渗透的方法。 (3)利用4个漏洞,实现对靶机的攻击。 1.2学习内容 (1)metasploit的用法:可以简单总结为“Search-Use-Show-Set-Exploit/run”。 (2)四种漏洞的原理。 a.Vsftpd源码包后门漏洞:在特定版本的v…

《Django 5 By Example》阅读笔记:p211-p236

《Django 5 By Example》学习第7天,p211-p236总结,总计26页。 一、技术总结 1.messages(消息推送) django.contrib.messages。 2.OAuth 2 Django里使用的是social-app-django这个package进行认证操作。 3.开发环境使用HTTPS 使用django-extensions,werkzeug,pyOpenSSL实现。…

团队作业4—项目冲刺-2

这个作业属于哪个课程 计科22级34班这个作业要求在哪里 作业要求这个作业的目标 项目冲刺,进行为期7天的敏捷开发团队作业4——项目冲刺-2 每天举行站立式会议团队成员当天作了会议总结的照片昨天已经完成的工作 今天计划完成的工作 工作中遇到的困难 代码签入图 适当的项目程…

day7-Scrum

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/作业要求 需求&原型改进、系统设计、Alpha任务分配计划、测试计划团队项目仓库 https://github.com/bitpurleclude/GDUT-Goofish/issues团队成员 李嘉锐 车峤锐 于海洋 林进光 黄健 钟启…

第 7 篇 Scrum 冲刺博客

团队作业4——第 7 篇 Scrum 冲刺博客 作业要求这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13234这个作业的目标 团队集体协作完成项目开发队名 雄狮般的男人站立式…

第 6 篇 Scrum 冲刺博客

团队作业4——第 6 篇 Scrum 冲刺博客 作业要求这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13234这个作业的目标 团队集体协作完成项目开发队名 雄狮般的男人站立式…

团队冲刺-6

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13234这个作业的目标 记录每日进展和问题,对问题进行解决1.每日会议| 成员 | 昨天任务 | 今天任务|工作中…