数据采集作业四

news/2024/11/29 22:33:02/文章来源:https://www.cnblogs.com/yyhwswswws/p/18569134

数据采集作业四

作业①:

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

(1)代码如下:

import mysql.connectordef establish_db_connection_and_create_schema():# 连接到MySQL数据库conn = mysql.connector.connect(host="host",user="username",passwd="password")cursor = conn.cursor()# 定义数据库和表名db_name = "stock_market_data"table_name = "shenzhen_stocks"# 创建数据库(如果不存在)create_db_query = f"CREATE DATABASE IF NOT EXISTS {db_name}"cursor.execute(create_db_query)# 使用创建的数据库use_db_query = f"USE {db_name}"cursor.execute(use_db_query)# 定义表的创建语句create_table_query = f"""CREATE TABLE IF NOT EXISTS {table_name} (record_id INT AUTO_INCREMENT PRIMARY KEY,stock_number VARCHAR(255),stock_name VARCHAR(255),last_trade_price VARCHAR(255),percentage_change VARCHAR(255),change_amount VARCHAR(255),trading_volume VARCHAR(255),total_trading_amount VARCHAR(255),price_range VARCHAR(255),daily_high VARCHAR(255),daily_low VARCHAR(255),opening_price VARCHAR(255),previous_close VARCHAR(255))"""# 执行表的创建语句cursor.execute(create_table_query)# 提交更改conn.commit()# 关闭游标和连接cursor.close()conn.close()# 调用函数以创建数据库和表
establish_db_connection_and_create_schema()

爬取“沪深A股”、“上证A股”、“深证A股”

点击查看代码

(2)运行结果

结果如下:

img

img

(3)感悟

通过这次实践,我借助 Selenium 精准定位 HTML 元素、处理 Ajax 加载、模拟用户操作,有效应对复杂网页的数据提取需求。同时,将爬取的数据存储到 MySQL 数据库中,不仅考验了数据结构设计能力,还强化了对数据库操作的理解。在这一过程中,我学会了从问题分析到代码实现的完整流程,提升了代码的鲁棒性和复用性,也对网页爬虫技术与数据库存储有了更深入的认识,为后续的数据分析与开发实践奠定了扎实的基础。

作业②:

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

(1)代码如下:

import time
import mysql.connector
from selenium import webdriver
from selenium.webdriver.common.by import By# 初始化数据库连接
db = mysql.connector.connect(host="host",user="user",password="password",database="database"
)
cursor = db.cursor()# 初始化WebDriver
driver = webdriver.Chrome()  # 确保已安装ChromeDriverdef wait_for_page_load():time.sleep(5)  # 等待页面加载,这里可以使用更先进的等待方法,如WebDriverWaitdef scrape_course_details(course_element):course_name = course_element.find_element(By.XPATH, './/h3').textcollege_name = course_element.find_element(By.XPATH, './/p[@class="_2lZi3"]').textteacher_name = course_element.find_element(By.XPATH, './/div[@class="_1Zkj9"]').textparticipant_count = course_element.find_element(By.XPATH, './/div[@class="jvxcQ"]/span').textprogress = course_element.find_element(By.XPATH, './/div[@class="jvxcQ"]/div').textreturn course_name, college_name, teacher_name, participant_count, progressdef scrape_teacher_team(driver):teacher_names = []next_button_xpath = '//div[@class="um-list-slider_next f-pa"]'teacher_item_xpath = '//div[@class="um-list-slider_con_item"]/h3[@class="f-fc3"]'while True:teachers = driver.find_elements(By.XPATH, teacher_item_xpath)for teacher in teachers:teacher_names.append(teacher.text.strip())next_button = driver.find_element(By.XPATH, next_button_xpath)if not next_button:breaknext_button.click()wait_for_page_load()return ','.join(teacher_names)def scrape_course_brief(driver):brief_xpath = '//*[@id="j-rectxt2"]'content_section_xpath = '//*[@id="content-section"]/div[4]/div//*'brief = driver.find_element(By.XPATH, brief_xpath).textif not brief:elements = driver.find_elements(By.XPATH, content_section_xpath)brief = ' '.join(element.text for element in elements)# 转义引号brief = brief.replace('"', r'\"').replace("'", r"\'")return brief.strip()def scrape_and_save_course_data(course_url):driver.get(course_url)wait_for_page_load()course_elements = driver.find_elements(By.XPATH, '//*[@id="channel-course-list"]/div/div/div[2]/div[1]/div')for course_element in course_elements:course_name, college_name, teacher_name, participant_count, progress = scrape_course_details(course_element)course_element.click()wait_for_page_load()# 切换到新标签页new_tab = [handle for handle in driver.window_handles if handle != driver.current_window_handle][0]driver.switch_to.window(new_tab)course_brief = scrape_course_brief(driver)teacher_team = scrape_teacher_team(driver)# 关闭新标签页并返回原页面driver.close()driver.switch_to.window(driver.window_handles[0])try:cursor.execute('INSERT INTO courseMessage (course_name, college_name, teacher_name, teacher_team, participant_count, progress, brief) VALUES (%s, %s, %s, %s, %s, %s, %s)', (course_name, college_name, teacher_name, teacher_team, participant_count, progress, course_brief))db.commit()except mysql.connector.Error as e:print("数据库插入数据失败:", e)# 使用示例(假设有一个课程列表页面的URL)
course_list_url = "your_course_list_url_here"
scrape_and_save_course_data(course_list_url)# 关闭数据库连接和WebDriver
cursor.close()
db.close()
driver.quit()

(2)结果如下

img

(3)感悟

结合 MySQL 数据库对爬取的数据进行存储和管理,锻炼了我在设计表结构、处理数据完整性和提高查询效率方面的能力。整个过程中,我学会了分析复杂网页结构、应对动态加载的挑战,以及如何高效地组织和持久化大规模数据,为后续更复杂的数据采集和分析任务积累了宝贵的经验。

3.华为云_大数据实时分析处理实验手册-Flume日志采集实验

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

执行脚本测试
使用more命令查看生成的数据
img

任务二:下载安装并配置Kafka

安装Kafka运行环境
img

安装Kafka客户端
img

任务三:安装Flume客户端

安装Flume运行环境
img

安装Flume客户端
img

任务四:配置Flume采集数据
修改配置文件
创建消费者消费kafka中的数据
img

感悟

通过本次实验,进一步巩固了我对分布式数据处理的理解。这次实践让我深刻认识到流式数据处理在大数据实时分析中的重要性,同时强化了我在配置环境、处理错误、优化数据流管道等方面的能力,为日后复杂的大数据项目开发提供了宝贵的经验。

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

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

相关文章

Top 5 Kafka使用场景

▫️ 日志处理与分析📈:适用于处理和分析大量日志数据,生成趋势 ▫️ 数据流推荐系统🛒:实时数据流驱动个性化推荐。 ▫️ 系统监控与报警🚨:实时监控系统指标,及时响应报警 ▫️ 变更数据捕获(CDC)🔄:捕获和处理数据库变更,保持系统间数据同步 ▫️ 系…

IDEA2024.3激活提示激活码失效、IDEA2024版本

IDEA激活提示激活码失效解决 点击试用,或者使用网上教程激活后断网打开idea 进入idea随便创建或打开个项目 点击help -> Edit Custom VM Options [帮助 -> 编辑自定义VM选项]编辑自定义VM,鼠标右击找到这个目录看看是不是以前激活的目录,删除 重新执行激活操作 需要…

IDEA2024.3激活提示激活码失效

IDEA激活提示激活码失效解决 点击试用,或者使用网上教程激活后断网打开idea 进入idea随便创建或打开个项目点击help -> Edit Custom VM Options [帮助 -> 编辑自定义VM选项]编辑自定义VM找到这个目录看看是不是以前激活的目录,删除 重新执行激活操作 需要激活软件,可…

使用EVOLVEpro对蛋白质热稳定性进行定向进化

对EVOLVEpro还不熟的读者可以查看之前的博客:Rapid in silico directed evolution by a protein language model with EVOLVEpro 文献解读。 本文通过Kaggle竞赛中提供的酶热稳定性数据集对EVOLVEpro的性能进行验证。 数据集为test.csv和test_labels.csv,这是经过实验测量的某…

计算机概念——io 复用

前言 首先什么是io复用呢? 现在web框架没有不用到io复用的,这点是肯定的,不然并发真的很差。 那么io复用,复用的是什么呢?复用的真的不是io管道啥的,也不是io连接啥的,复用的是io线程。 这其实是操作系统的设计上的io并发不足的地方,然后自己给慢慢填了。 正文 听一段历…

java学习11.25

写了很久的这个差费报销系统,写的太慢了,一半不到,结构上也非常臃肿。

HTML中实现多选一且输入框的启用与禁用

其他类别内容:<script>// 控制"其他类别内容"输入框的启用与禁用function toggleTypeContent() {var typeContentInput = document.getElementById("typecontent");var otherRadio = document.getElementById("other");// 如果选中了&quo…

Pwn 乱刷合集

持续更新中3※ [SHCTF 2024] No stack overflow2考点:ret2libc,libc 库查询,整数溢出在 linux 下使用 checksec 查看该程序开启的保护,发现 Arch 为 amd64-64-little,这说明这是一个 64位 的程序,并且采用了 小端 存储,即低位对应低地址,高位对应高地址。下方的 RELRO …

MySQL原理简介—7.redo日志的底层原理

大纲 1.redo日志对事务提交后数据不丢失的意义 2.redo日志文件的构成 3.redo日志会写入到Redo Log Blcok中 4.redo日志如何写入到Redo Log Blcok中 5.Redo Log Buffer解析 6.Redo Log Buffer的刷盘时机 7.undo log回滚日志原理1.redo日志对事务提交后数据不丢失的意义 (1)redo …

MySQL原理简介—8.MySQL并发事务处理

大纲 1.简单总结增删改SQL语句的实现原理 2.多个事务同时执行的场景遇到的问题 3.多个事务并发更新或查询时可能出现的问题 4.SQL标准中对事务的4个隔离级别 5.MySQL是如何支持4种事务隔离级别的 6.Spring事务注解了如何设置隔离级别 7.uodo log多版本链介绍 8.基于undo log多版…