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

news/2024/11/29 23:54:02/文章来源:https://www.cnblogs.com/fzu-ljs/p/18568905

102202143 梁锦盛

1.东方财富网信息爬取

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

一、作业代码与展示

1.编写代码文件

from selenium import webdriver
from selenium.webdriver.common.by import By
import mysql.connector
import time# 设置 MySQL 连接
connection = mysql.connector.connect(host="localhost",user="root",password="2896685056Qq!",database="stock_data"
)
cursor = connection.cursor()# 设置 Selenium 驱动
driver = webdriver.Chrome()# 定义板块URL字典
board_urls = {"沪深A股": "http://quote.eastmoney.com/center/gridlist.html#hs_a_board","上证A股": "http://quote.eastmoney.com/center/gridlist.html#sh_a_board","深证A股": "http://quote.eastmoney.com/center/gridlist.html#sz_a_board"
}# 遍历每个板块页面并提取数据
for board_name, url in board_urls.items():driver.get(url)time.sleep(3)  # 等待页面加载# 获取表格每一行的股票数据rows = driver.find_elements(By.XPATH, "//*[@id='table_wrapper-table']/tbody/tr")for row in rows:data = {"bStockNo": row.find_element(By.XPATH, "./td[2]/a").text,  # 股票代码"bStockName": row.find_element(By.XPATH, "./td[3]/a").text,  # 股票名称"latestPrice": row.find_element(By.XPATH, "./td[5]").text,  # 最新报价"changeRate": row.find_element(By.XPATH, "./td[6]").text,  # 涨跌幅"changeAmount": row.find_element(By.XPATH, "./td[7]").text,  # 涨跌额"volume": row.find_element(By.XPATH, "./td[8]").text,  # 成交量"turnover": row.find_element(By.XPATH, "./td[9]").text,  # 成交额"amplitude": row.find_element(By.XPATH, "./td[10]").text,  # 振幅"highPrice": row.find_element(By.XPATH, "./td[11]/span").text,  # 最高价"lowPrice": row.find_element(By.XPATH, "./td[12]").text,  # 最低价"openPrice": row.find_element(By.XPATH, "./td[13]").text,  # 今开"prevClose": row.find_element(By.XPATH, "./td[14]").text  # 昨收}# 移除百分号并转换为小数格式data["changeRate"] = float(data["changeRate"].replace('%', '')) / 100 if '%' in data["changeRate"] else float(data["changeRate"])data["amplitude"] = float(data["amplitude"].replace('%', '')) / 100 if '%' in data["amplitude"] else float(data["amplitude"])print(data)# 将数据插入 MySQLcursor.execute("""INSERT INTO stocks (bStockNo, bStockName, latestPrice, changeRate, changeAmount, volume, turnover, amplitude, highPrice, lowPrice, openPrice, prevClose, board)VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)""", (data["bStockNo"], data["bStockName"], data["latestPrice"], data["changeRate"], data["changeAmount"],data["volume"], data["turnover"], data["amplitude"], data["highPrice"], data["lowPrice"],data["openPrice"], data["prevClose"], board_name))# 提交事务
connection.commit()# 关闭连接
cursor.close()
connection.close()
driver.quit()

2.运行结果


3.Gitee文件夹链接:https://gitee.com/liang-jinsheng-289668/project/tree/master/作业4

二、作业心得

完成这个作业,我懂得了任何使用selenium爬取不同页面的数据

2.mooc信息爬取

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

一、作业代码与展示

1.编写代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import pymysql
import time# 设置Chrome选项
options = webdriver.ChromeOptions()
options.add_argument('--disable-extensions')
options.add_argument('--no-sandbox')
driver = webdriver.Chrome(options=options)# MySQL连接配置
db = pymysql.connect(host='localhost',user='root',password='2896685056Qq!',database='MoocData',charset='utf8mb4'
)
cursor = db.cursor()# 数据插入函数
def insert_data(course_info):sql = """INSERT INTO Courses (cCourse, cCollege, cTeacher, cTeam, cCount, cProcess, cBrief)VALUES (%s, %s, %s, %s, %s, %s, %s)"""cursor.execute(sql, course_info)db.commit()print(f"Data inserted: {course_info}")# 登录函数
def login():print("1")driver.get("https://www.icourse163.org")print("Accessing login page")# 点击登录按钮login_btn = driver.find_element(By.CLASS_NAME, "_3uWA6")login_btn.click()# 切换到登录框iframeiframe = WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.TAG_NAME, "iframe")))driver.switch_to.frame(iframe)# 输入用户名和密码driver.find_element(By.ID, "phoneipt").send_keys("13015721181")driver.find_element(By.XPATH,"//input[@type='password' and @name='email' and contains(@class, 'j-inputtext')]").send_keys("2896685056Qq!")  # 输入密码driver.find_element(By.ID, "submitBtn").click()# 切换回主内容driver.switch_to.default_content()print("Login successful")time.sleep(5)# 主程序逻辑
def scrape_courses():driver.get("https://www.icourse163.org")print("Accessing course list page")# 向下滚动以加载更多的_3KiL7类元素scroll_pause_time = 3  # 每次滚动后等待的时间last_height = driver.execute_script("return document.body.scrollHeight")while True:try:while True:# 向下滚动页面driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")time.sleep(scroll_pause_time)# 计算新的页面高度并比较new_height = driver.execute_script("return document.body.scrollHeight")if new_height == last_height:breaklast_height = new_height# 等待新的_3KiL7类元素加载完成courses = WebDriverWait(driver, 15).until(EC.presence_of_all_elements_located((By.CLASS_NAME, "_3KiL7")))for course in courses:try:# 基本信息提取cCourse = course.find_element(By.CLASS_NAME, "_3EwZv").textprint(cCourse)cCollege = course.find_element(By.CLASS_NAME, "_2lZi3").textprint(cCollege)cCount = int(course.find_element(By.CLASS_NAME, "_3DcLu").text.replace("人参加", ""))print(cCount)# 进入课程详情页course.find_element(By.CLASS_NAME, "_3EwZv").click()driver.switch_to.window(driver.window_handles[-1])# 等待详情页加载WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.CLASS_NAME, "f-richEditorText")))# 详情信息提取cBrief = driver.find_element(By.CLASS_NAME, "f-richEditorText").textprint(cBrief)cProcess = driver.find_element(By.CLASS_NAME, "text").textprint(cProcess)cTeacher = driver.find_element(By.CLASS_NAME, "f-fc3").textprint(cTeacher)cTeam = ", ".join([t.text for t in driver.find_elements(By.CLASS_NAME, "cnt h3")])# 数据插入course_info = (cCourse, cCollege, cTeacher, cTeam, cCount, cProcess, cBrief)insert_data(course_info)# 关闭详情页返回主页面driver.close()driver.switch_to.window(driver.window_handles[0])except Exception as e:print(f"Error processing course: {e}")driver.switch_to.window(driver.window_handles[0])# 检查是否存在下一页if len(courses)==0:breaktime.sleep(3)except Exception as e:print(f"Error on page: {e}")break# 程序执行
try:login()scrape_courses()
finally:driver.quit()db.close()

2.运行结果


3.Gitee文件夹链接:https://gitee.com/liang-jinsheng-289668/project/tree/master/作业4

二、作业心得

我学会了如何使用selenium去逐个点击卡片进入不同页面并返回,并通过元素类名爬取不同的信息

3.Flume日志采集

完成文档 华为云_大数据实时分析处理实验手册-Flume日志采集实验(部分)v2.docx 中的任务

一、作业展示

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

任务二:配置Kafka

安装Kafka运行环境

安装Kafka客户端

设置环境变量,在kafka中创建topic

任务三: 安装Flume客户端

安装Flume运行环境

安装Flume到目录“/opt/FlumeClient”

任务四:配置Flume采集数据

二、作业心得

完成这个作业,我了解了鲲鹏架构特点和优势,学会在华为云创建管理服务器实例,掌握 Hadoop 在鲲鹏服务器上的部署,包括 HDFS 的安装配置启动,学会配置优化参数及规划资源,还学会使用云平台工具服务,如云硬盘、弹性 IP 等。认识到实时分析重要性,了解其流程架构,体会到与离线分析的不同,需根据业务场景选择合适方式。培养了数据分析思维能力,认识到离线分析在企业中的应用,意识到要不断学习新技术适应变化,提高技术水平和耐心毅力。

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

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

相关文章

工程管理如何优化?2024年8款进度管理系统分享

本文盘点了8款主流工程项目管理工具:1.Worktile;2.泛普软件;3.子筑云;4.蓝凌;5.智建云;6.Wrike;7.Smartsheet;8.用友U8。工程进度管理系统是确保工程项目按计划顺利进行的关键工具。这类系统通过提供任务调度、资源分配、进度跟踪和实时通讯等功能,帮助项目经理和团队…

Docling:一个用于文档解析和格式转换的 IBM 开源工具

日常接触到的文档格式越发的多,pdf、doc、ppt、html等等,有没有一种方式可以将其转化为统一的格式呢?比如转为markdown或者json格式。 今天推荐一个IBM开源的工具,它可以满足你的需求,它是用python开发的。 下面为具体介绍内容: 项目简介 Docling是一个用于文档解析和格式…

Vulnhub Tr0ll

0x01:端口扫描 主机发现 nmap -sn 192.168.231.0/24IP地址为192.168.231.137 全端口扫描 nmap --min-rate 10000 -p- 192.168.231.137开放了21ftp,22ssh,80http UDP扫描 nmap -sU --min-rate 10000 -p- 192.168.231.137无UDP端口开放 接下来进行详细端口扫描 nmap -sT -sC -…

裁员了,很严重,大家做好准备吧!

在实际工作中,测试人需要解决的是具体的技术问题,而不仅仅是理论知识。为了全面评估候选人的能力,确保招聘到真正适合公司的人才。📝 博主首页 : 「码上生花」 ,同名公众号 :「伤心的辣条」📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MyS…

IDEA如何快速地重写方法,如equals、toString等

前言 大家好,我是小徐啊。我们在使用IDEA的时候,有时候是需要重写equals和toString等方法的。这在IDEA中已经很方便的给我们准备好了快速的操作了。今天就来讲解一下。 如何重写 首先,打开要重写方法的文件,让鼠标定位到这个文件。然后,点击上方的代码,再点击重写方法这个…

高级语言程序设计课程第九次个人作业

班级:https://edu.cnblogs.com/campus/fzu/2024C 作业要求:https://edu.cnblogs.com/campus/fzu/2024C/homework/13311 学号:102400203 姓名:黄奕 14.17 3.这里定义月份名和其缩写时忘记定义长度,在第五问的时候系统报错才发现,更改在第五问float类型对应%f,我对应成%lf…

分布式一致性算法Raft

Raft算法在了解Raft之前,我们先了解一致性(Consensus)这个概念,它是指多个服务器在状态达成一致,但是在一个分布式系统中,因为各种意外可能,有的服务器可能会崩溃或变得不可靠,它就不能和其他服务器达成一致状态。这样就需要一种Consensus协议,一致性协议是为了确保容…

LeetCode24 两两交换链表中的节点

两两交换链表中的节点LeetCode24 两两交换链表中的节点 题目链接:LeetCode24 描述 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。示例输入:head = [1,2,3,4] 输出:[2,1,4,3]思路代码 class Solution {public ListNode swapPairs(ListNode head) {ListNo…

51单片机入门:LED灯控制(01)

第一篇博客,博客园注册很久却一直没有好好利用,今天把以前的文章都删掉,就当开个好头吧。 希望在以后的时间中,自己能够认真、努力、珍惜时间。 零基础入门51单片机 单片机(Microcontroller Unit,MCU)是一种集成电路芯片,它将计算机的CPU、存储器(RAM和ROM)、输入/输…

解读Graph+AI白皮书:LLM浪潮下,Graph尚有何为?

蚂蚁&之江实验室牵头的《Graph+AI:大模型浪潮下的图计算》白皮书发布,详细探讨了图计算与人工智能技术的融合发展,涵盖数据处理、算法创新、应用实践及未来挑战,强调图技术在提升模型解释性和处理复杂关系数据方面的重要性。历时半年,由蚂蚁集团和之江实验室牵头,联合…

C#/.NET/.NET Core技术前沿周刊 | 第 14 期(2024年11.18-11.24)

前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。欢迎投稿、推荐或自荐优质文章、项目、学习资源等…

24.10.25 远程连接以及排错

一.Typora的使用 ctrl+数字 表示几级标题 ctrl+shift+[ 表示有序列表 ctrl+shift+] 表示无序列表 enter两次列表消失 英文下的点,三点bash+回车表示代码块 英文下的点,三点sh+回车表示代码块 二.VMware使用 1.VMware只能双击一次出现这个提示,表示已经打开一个…