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

news/2024/11/18 20:03:36/文章来源:https://www.cnblogs.com/xuxuanyu/p/18553500

作业内容

作业①:

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

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import pymysql
chrome_driver_path = r"C:\Users\xxy\AppData\Local\Programs\Python\Python310\Scripts\chromedriver.exe"
service = Service(executable_path=chrome_driver_path)
options = Options()
options.add_argument('--disable-gpu')
options.add_argument('--disable-blink-features=AutomationControlled')
driver = webdriver.Chrome(service=service, options=options)
driver.maximize_window()# 连接scrapy数据库,创建表
try:db = pymysql.connect(host='127.0.0.1',user='root',password='xxy4113216923',port=3306,database='scrapy')cursor = db.cursor()cursor.execute('DROP TABLE IF EXISTS stockT')sql = '''CREATE TABLE stockT(num varchar(32),id varchar(12),name varchar(32),Latest_quotation varchar(32),Chg varchar(12),up_down_amount varchar(12),turnover varchar(16),transaction_volume varchar(16),amplitude varchar(16),highest varchar(32), lowest varchar(32),today varchar(32),yesterday varchar(32))'''cursor.execute(sql)
except Exception as e:print(e)def spider(page_num):cnt = 0while cnt < page_num:spiderOnePage()driver.find_element(By.XPATH,'//a[@class="next paginate_button"]').click()cnt +=1time.sleep(2)# 爬取一个页面的数据
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()# 访问东方财富网
driver.get('https://quote.eastmoney.com/center/gridlist.html#hs_a_board')
# 访问沪深京A股
driver.get(WebDriverWait(driver,10,0.48).until(EC.presence_of_element_located((By.ID,'menu_hs_a_board'))).get_attribute('href'))
# 爬取两页的数据
spider(2)
driver.back()# 访问上证A股
driver.get(WebDriverWait(driver,10,0.48).until(EC.presence_of_element_located((By.ID,'menu_sh_a_board'))).get_attribute('href'))
spider(2)
driver.back()# 访问深证A股
driver.get(WebDriverWait(driver,10,0.48).until(EC.presence_of_element_located((By.ID,'menu_sz_a_board'))).get_attribute('href'))
spider(2)try:cursor.close()db.close()
except:pass
time.sleep(3)
driver.quit()

实验结果:

实验心得:
通过本次作业,我深入掌握了 Selenium 相关操作,包括查找元素、处理 Ajax 数据和等待元素。设计 MySQL 表头让我明白数据存储结构的重要性。过程有挑战,如东方财富网页结构变化和数据存储问题,但提升了编程和处理数据能力,对类似任务有很大帮助。

作业②:

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

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import pymysqlchrome_driver_path = r"C:\Users\xxy\AppData\Local\Programs\Python\Python310\Scripts\chromedriver.exe"
service = Service(executable_path=chrome_driver_path)
options = Options()
options.add_argument('--disable-gpu')
options.add_argument('--disable-blink-features=AutomationControlled')
driver = webdriver.Chrome(service=service, options=options)
driver.maximize_window()
# 连接MySql
try:db = pymysql.connect(host='127.0.0.1', user='root', password='xxy4113216923', port=3306, database='scrapy')cursor = db.cursor()cursor.execute('DROP TABLE IF EXISTS courseMessage')sql = '''CREATE TABLE courseMessage(cCourse varchar(64),cCollege varchar(64),cTeacher varchar(16),cTeam varchar(256),cCount varchar(16),cProcess varchar(32),cBrief varchar(2048))'''cursor.execute(sql)
except Exception as e:print(e)# 爬取一个页面的数据
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)# 访问中国大学慕课
driver.get('https://www.icourse163.org/')# 访问国家精品课程
driver.get(WebDriverWait(driver, 10, 0.48).until(EC.presence_of_element_located((By.XPATH, '//*[@id="app"]/div/div/div[1]/div[1]/div[1]/span[1]/a'))).get_attribute('href'))
spiderOnePage()  # 爬取第一页的内容count = 1
'''翻页操作'''
# 下一页的按钮
next_page = driver.find_element(By.XPATH, '//*[@id="channel-course-list"]/div/div/div[2]/div[2]/div/a[10]')
# 如果还有下一页,那么该标签的class属性为_3YiUU
while next_page.get_attribute('class') == '_3YiUU ':if count == 3:breakcount += 1next_page.click()  # 点击按钮实现翻页spiderOnePage()  # 爬取一页的内容next_page = driver.find_element(By.XPATH, '//*[@id="channel-course-list"]/div/div/div[2]/div[2]/div/a[10]')try:cursor.close()db.close()
except:passtime.sleep(3)
driver.quit()

实验结果:

实验心得:
此次作业让我对 Selenium 有了新认识,模拟登录很关键。爬取 mooc 网课程信息使我在数据提取和存储上有了更多实践经验,也提高了应对复杂网页结构的能力,有助于今后的爬虫工作。

作业③:

要求:
掌握大数据相关服务,熟悉Xshell的使用
完成文档 华为云_大数据实时分析处理实验手册-Flume日志采集实验(部分)v2.docx 中的任务,即为下面5个任务,具体操作见文档。
环境搭建:
任务一:开通MapReduce服务

绑定弹性公网ip

实时分析开发实战:
任务一:Python脚本生成测试数据

任务二:配置Kafka
安装kafka客户端

在kafka中创建topic

任务三: 安装Flume客户端
安装 flume运行环境


安装flume客户端

重启flume服务

任务四:配置Flume采集数据

心得体会:
这次作业让我掌握了大数据相关服务和 Xshell 使用。环境搭建与实时分析开发实战的各项任务,如开通服务、脚本生成数据、配置 Kafka 和 Flume 等,让我熟悉了大数据处理流程,虽有困难,但收获巨大。

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

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

相关文章

【Visio 2024软件下载与安装教程-亲测好用】

Microsoft Visio 2024专业版是一款专业的专业矢量绘图软件。Visio 2024不但新增了许多功能,而且还优化了众多性能,比如用户界面优化、更多图形元素库、允许用户邀请其他人一起编辑和查看图表、过程自动化等等,其一系列的改动旨在给予用户们最直观、最便利的操作体验! 操作系…

工作服穿戴识别系统

工作服穿戴识别系统利用现场装好的监控摄像头24小时对工作场景进行实时监测。工作服穿戴识别系统一旦检测到员工工服穿戴不符合规定的情况,系统能够立即发出警报,提醒相关人员进行处理。通过实时监控和精准报警,工作服穿戴识别系统能够有效规范作业人员的行为。员工知道自己…

桥梁大师_钢筋图_配置汇总

1.2米桩基_【正常】 1.2米桩基_【配抗震钢筋】

值班睡岗智能监测系统

值班睡岗智能监测系统是一种利用人工智能技术,值班睡岗智能监测系统通过现场已有的摄像头进行实时视频分析的系统。系统能够自动识别监测现场人员是否在岗位上,一旦检测到离岗或睡岗行为,系统会实时抓拍并触发报警,将报警信息传送至后台监控平台。系统能够替代人工进行长时…

使用 Nginx Ingress 实现金丝雀发布/灰度发布

使用 Nginx Ingress 实现金丝雀发布/灰度发布 说明: 使用 Nginx Ingress 实现金丝雀发布的集群,需部署 Nginx Ingress 作为 Ingress Controller,并且对外暴露统一的流量入口。详情请参见 在 TKE 上部署 Nginx Ingress。 使用场景 使用 Nginx Ingress 实现金丝雀发布适用场景…

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

1.实验内容 本实践目标是掌握metasploit的用法。 指导书参考Rapid7官网的指导教程。 https://docs.rapid7.com/metasploit/metasploitable-2-exploitability-guide/ 下载官方靶机Metasploitable2,完成下面实验内容。 (1)前期渗透 ①主机发现(可用Aux中的arp_sweep,search一…

如何在开源鸿蒙OpenHarmony开启SELinux模式?RK3566鸿蒙开发板演示

本文介绍开源鸿蒙OpenHarmony系统下,开启/关闭SELinux权限的方法,触觉智能Purple Pi OH鸿蒙开发板演示,已适配全新OpenHarmony5.0 Release系统!本文介绍在开源鸿蒙OpenHarmOony系统下,开启/关闭SELinux权限的方法,触觉智能Purple Pi OH鸿蒙开发板演示,搭载了瑞芯微RK356…

locust(服务器压测)

一: 注意事项:项目和压力机不能在同一台机器 二: 1.脚本压测 命令行:locust -f get.py --host=http:ip+host 注意事项Wait_time写0,0 不进行等待 1.脚本压测 2.1服务器防火墙需要关闭 2.2需要把打印去掉 2.3 Download Data 下载报告三.非web模式新版中 -u 指的是多少 用户/…

旺仔水饺-冲刺总结

1. 冲刺内容总结与反思 1.1 项目总结 本次冲刺阶段对项目的不足之处进行了相关改进: 针对团队沟通问题: 我们在本次冲刺阶段几乎是每天召开团队会议,包括沟通效率比较高的的站立会议;我们站立会议每次召开十分钟,尽量在这个十分钟之内大家都都把自己当前进行的的功能模块遇…

线程初见与线程管理

Chap1,2 Hello Concurrency与线程管理 参考书目:《C++ Concurrency in action》- By Anthony Willians, Second Edition 读书笔记 Contents定义并发,多线程 使用并发,多线程 简单的C++多线程1.1 什么是并发 1.1.1 计算机并发多核心:真正并行 单核心:时间片切换。1.1.2 并发…

人工智能之机器学习线代基础——线性相关和线性无关

线性相关(Linearly Dependent) 和 线性无关(Linearly Independent) 是线性代数中描述向量组关系的概念,用于判断向量组是否可以通过线性组合生成其他向量,以及它们是否包含冗余信息。

BurpSuite功能介绍

Burp Suite一共包含13个功能模块,它们帮助渗透测试人员更好地了解目标应用的整体状况、当前的工作涉及哪些目标、攻击面等信息。 Burp Suite Target主要包含站点地图、目标域、Target工具域并分析可能存在的漏洞。 Burp Suite Spider主要用于大型的应用系统测试,它能在很短时…