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

news/2024/11/16 20:40:13/文章来源:https://www.cnblogs.com/D0b1etake/p/18549784

作业①:

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

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
from selenium.webdriver.chrome.options import Options
import pymysql# 建表操作
table_names=['stocks_hs','stocks_hz','stocks_sz'] #分别对应三个板块的表名
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='******', charset='utf8')
conn.autocommit(True)
with conn.cursor() as cursor:cursor.execute('USE homework')for table_name in table_names:#建三张表cursor.execute(f'drop table {table_name}') #因为我之前已经建了,为了调试程序直接删了重建,第一次运行可注释掉这行cursor.execute(f"""CREATE TABLE IF NOT EXISTS {table_name} (序号 INT,代码 VARCHAR(10),名称 VARCHAR(255),最新价 DECIMAL(10,2),涨跌幅 VARCHAR(10),涨跌额 DECIMAL(8,2),成交量 VARCHAR(10),成交额 VARCHAR(10),振幅 VARCHAR(10),最高 DECIMAL(10,2),最低 DECIMAL(10,2),今开 DECIMAL(10,2),昨收 DECIMAL(10,2));""") #成交量和成交额里都有汉字,振幅涨跌幅有百分号,这里为了方便直接使用字符串类型了oringinal_url = 'https://quote.eastmoney.com/center/gridlist.html#hs_a_board'
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36'
}chrome_options = Options()
chrome_options.add_argument('--headless')
driver = webdriver.Chrome(chrome_options)
driver.get(oringinal_url)
for i in range(0,3):stockBotton = driver.find_elements(By.XPATH, "//*[@id='tab']/ul/li")[i].find_element(By.XPATH,"./a") #对应板块按钮stockBotton.click()#点击按钮driver.refresh()#刷新网页WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, 'td')))stocks=driver.find_elements(By.XPATH,"//table[@id='table_wrapper-table']/tbody/tr")#查找表格for stock in stocks:td1 = stock.find_element(By.XPATH,'./td[1]').text#序号td2 = stock.find_element(By.XPATH, './td[2]/a').text#代码td3 = stock.find_element(By.XPATH, './td[3]/a').text#名称td5 = stock.find_element(By.XPATH, './td[5]/span').text#最新价td6 = stock.find_element(By.XPATH, './td[6]/span').text#涨跌幅td7 = stock.find_element(By.XPATH, './td[7]/span').text#涨跌额td8 = stock.find_element(By.XPATH, './td[8]').text#成交量td9 = stock.find_element(By.XPATH, './td[9]').text#成交额td10 = stock.find_element(By.XPATH, './td[10]').text#振幅td11 = stock.find_element(By.XPATH, './td[11]/span').text#最高td12 = stock.find_element(By.XPATH, './td[12]/span').text#最低td13 = stock.find_element(By.XPATH, './td[13]/span').text#今开td14 = stock.find_element(By.XPATH, './td[14]').text#昨收#将对应元素插入表中sql = f"""INSERT INTO {table_names[i]} (序号,代码,名称,最新价,涨跌幅,涨跌额,成交量,成交额,振幅,最高,最低,今开,昨收)VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"""data = (td1, td2, td3, td5, td6,td7, td8, td9, td10, td11,td12, td13, td14)with conn.cursor() as cursor:try:cursor.execute(sql, data)except Exception as e:print(e)print(f'{table_names[i]}数据存储成功')
driver.quit()

2.输出信息




3.Gitee文件夹链接

作业4/1 · 舒锦城/2022级数据采集与融合技术 - 码云 - 开源中国

作业②:

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

1.核心代码描述

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import pymysql
from bs4 import BeautifulSoup# 设置Chrome浏览器为无头模式(即不显示浏览器窗口)并禁用GPU加速,这样可以在后台运行浏览器操作
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')# 创建一个Chrome浏览器驱动实例,并传入设置好的选项
driver = webdriver.Chrome(options=chrome_options)# 登录操作
driver.get('https://www.icourse163.org/')time.sleep(2)
# 将浏览器窗口最大化,有些页面在不同窗口大小下可能显示效果不同,最大化可尽量保证页面元素正常显示
driver.maximize_window()# 通过XPath找到并点击页面上的登入按钮
next_button = driver.find_element(By.XPATH, '//*[@id="app"]/div/div/div[1]/div[3]/div[3]/div')
next_button.click()
# 再次等待2秒,确保点击按钮后的页面加载或相关操作完成
time.sleep(2)frame = driver.find_element(By.XPATH, '/html/body/div[13]/div[2]/div/div/div/div/div/div[1]/div/div[1]/div[2]/div[2]/div[1]/div/iframe')
driver.switch_to.frame(frame)# 输入账号操作
# 通过ID找到账号输入框元素,并使用send_keys方法输入指定的账号
account = driver.find_element(By.ID, 'phoneipt').send_keys('******')# 输入密码操作
# 通过XPath找到密码输入框元素,并使用send_keys方法输入指定的密码
password = driver.find_element(By.XPATH, '/html/body/div[2]/div[2]/div[2]/form/div/div[4]/div[2]/input[2]').send_keys("******")# 获取登录按钮操作
# 通过XPath找到登录按钮元素,后续将点击这个按钮来完成登录
logbutton = driver.find_element(By.XPATH, '/html/body/div[2]/div[2]/div[2]/form/div/div[6]/a')# 点击按钮操作
# 点击找到的登录按钮,触发登录行为
logbutton.click()
# 等待2秒,让登录后的页面加载完成,可能会有登录后的跳转或相关数据加载等操作
time.sleep(2)# 抓取课程信息操作# 打开课程搜索页面的网址
driver.get('https://www.icourse163.org/search.htm?search=%20#/')
# 等待2秒,确保搜索页面加载完成
time.sleep(2)next_button = driver.find_element(By.XPATH, '/html/body/div[4]/div[2]/div[2]/div[2]/div/div[6]/div[1]/div[1]/label/div')
next_button.click()
time.sleep(2)# 定义一段JavaScript代码,用于实现页面滚动操作
# 这段代码的目的是模拟用户不断滚动页面,以加载更多课程信息(因为很多网页是滚动加载更多内容的)
js = '''timer = setInterval(function(){var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;var ispeed=Math.floor(document.body.scrollHeight / 100);if(scrollTop > document.body.scrollHeight * 90 / 100){clearInterval(timer);}console.log('scrollTop:'+scrollTop)console.log('scrollHeight:'+document.body.scrollHeight)window.scrollTo(0, scrollTop+ispeed)}, 20)'''# 循环执行页面滚动操作,这里循环4次,每次执行滚动脚本后等待4秒,让页面有足够时间加载更多课程信息
for i in range(1, 5):driver.execute_script(js)time.sleep(4)# 获取当前页面的源代码,后续将使用BeautifulSoup解析这些源代码来提取课程信息html = driver.page_sourcesoup = BeautifulSoup(html, 'lxml')course_cards = soup.find_all('div', class_='u-course-card')# 遍历找到的每一个课程卡片元素for card in course_cards:a_tag = card.find('a', class_='f-thide', attrs={'data-v-55c26986': True})# 如果找到的a标签存在且其文本内容为'国家精品',则进行以下信息提取和数据库插入操作if a_tag and a_tag.text == '国家精品':# 提取课程名称b = card.find('a', class_='f-thide', attrs={'data-v-55c26986': True}).textc = card.find('a', class_='f-fc9', attrs={'data-v-55c26986': True}).textd = card.find('a', class_='f-fc9', attrs={'data-v-55c26986': True}).texte = card.find('a', class_='f-fc9', attrs={'data-v-55c26986': True}).text# 提取课程的选课人数信息f = card.find('span', class_='u-course-card__num').text# 找到课程卡片底部的元素,用于后续提取课程状态信息g_tag = card.find('div', class_='u-course-card__bottom')# 如果找到底部元素,则提取课程状态信息,否则设置为'已结束'(可能是默认状态假设)g = g_tag.find('span', class_='u-course-card__status').text if g_tag else '已结束'# 找到课程卡片的图片链接相关元素,用于后续提取课程简介信息h_tag = card.find('a', class_='u-course-card__img-link')# 如果找到图片链接相关元素,则提取课程简介信息,否则设置为'空'h = h_tag.find('span', class_='u-course-card__img-text').text if h_tag else '空'# 连接到本地的MySQL数据库mydb = pymysql.connect(host="localhost",user="root",password="******",database="homework",charset='utf8mb4')try:# 创建一个数据库游标对象,用于执行SQL语句with mydb.cursor() as cursor:# 定义要插入数据的SQL语句,将提取到的课程相关信息插入到名为'mooc'的表中sql = "INSERT INTO mooc (cCourse, cCollege, cTeacher, cTeam, cCount, cProcess, cBrief) VALUES (%s, %s, %s, %s, %s, %s, %s)"val = (b, c, d, e, f, g, h)# 执行SQL插入语句,将数据插入到数据库表中cursor.execute(sql, val)# 提交数据库事务,使插入操作生效mydb.commit()print(b, c, d, e, f, g, h)except Exception as e:print(f"Error: {e}")finally:# 关闭数据库连接,释放资源mydb.close()# 通过XPath找到并点击页面上的下一页按钮(用于切换到课程列表的下一页继续抓取信息)next_button = driver.find_element(By.XPATH, '//*[@id="j-courseCardListBox"]/div[2]/ul/li[10]')next_button.click()time.sleep(2)

2.输出信息

3.Gitee文件夹链接

作业4/2 · 舒锦城/2022级数据采集与融合技术 - 码云 - 开源中国

作业③:

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

1.开通MapReduce服务

2.Python脚本生成测试数据


3.配置Kafka







4.安装Flume客户端






5.配置Flume采集数据

心得体会:

1.selenium的使用

​ 对于selenium的使用更加熟练了,而且个人感觉使用selenium爬取股票数据相比于使用scrapy框架要方便很多,对于不同网站数据的爬取,应当选择合适的技术手段,才能做到方便快捷的爬取到我们想要的数据,并且使用selenium不需要设置用户头和cookie,以及被检测到的风险会小很多,更方便我们调试程序。

2.Flume日志采集

​ 在最后产生实时的可视化数据图像感到很有成就感,深感Flume日志采集的功能强大,同时对海量数据的快速处理有了更深的了解,希望以后能更加熟练运用这些工具带来更多的价值。

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

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

相关文章

第七章课后习题

习题7.1点击查看代码 import numpy as np from scipy.interpolate import interp1d from scipy.integrate import quad import matplotlib.pyplot as pltg = lambda x: (3 * x ** 2 + 4 * x + 6) * np.sin(x) / (x ** 2 + 8 * x + 6) x0 = np.linspace(0, 10, 1000) y0 = g(x0)…

第八章课后习题

习题8.4点击查看代码 from scipy.integrate import odeint import numpy as np import matplotlib.pyplot as plt # 设置 Matplotlib 不使用 LaTeX plt.rc(font, size=15) plt.rc(text, usetex=False)# 定义微分方程系统 dz = lambda z, t: [-z[0]**3 - z[1], z[0] - z[1]**3]#…

Solidity学习笔记-1

01.Hello World 开发工具 Remix // SPDX-License-Identifier: MIT // 软件许可,不写编译会出现警告 // 版本,“0.8.21”-->不能小于这个版本,"^"-->不能大于0.9.0 pragma solidity ^0.8.21; // 创建合约 contract HelloWorld {string public helloworld = &quo…

gofiber: 使用模板

一,安装模板库 $ go get github.com/gofiber/template/html/v2 go: downloading github.com/gofiber/template/html/v2 v2.1.2 go: downloading github.com/gofiber/utils v1.1.0 go: added github.com/gofiber/template/html/v2 v2.1.2 go: added github.com/gofiber/utils v…

书生共学大模型实战营第4期 L1G6000 OpenCompass评测作业

基础任务:使用OpenCompass评测浦语API记录复现过程并截图 按照教程流程进行,这里我们采用的测试样本数为2,所以不同于教程,Acc可能为0,25%,50%,75%,100%,介绍两个遇到的bug:metadata模块导入错误:ModuleNotFoundError: No module named importlib.metadata解决方法:…

ShardingSphere如何轻松驾驭Seata柔性分布式事务?

0 前文 上一文解析了 ShardingSphere 强一致性事务支持 XAShardingTransactionManager ,本文继续:讲解该类 介绍支持柔性事务的 SeataATShardingTransactionManagersharding-transaction-xa-core中关于 XAShardingTransactionManager,本文研究 XATransactionManager 和 Shar…

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

1.实验内容 1.1 本周学习内容回顾 使用了Metasploit框架,其是一个功能强大的渗透测试框架。在使用的过程当中,Metasploit 提供了种类繁多的攻击模块,涵盖了远程代码执行、服务拒绝、提权等多种攻击方式,支持对多种操作系统和应用程序进行测试。除了漏洞利用,它还具备强大的…

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

1.实验内容 1.从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取如下信息: DNS注册人及联系方式;该域名对应IP地址;IP地址注册人及联系方式;IP地址所在国家、城市和具体地理位置。 PS:使用whois、dig、nslookup、traceroute、以及各类在线和离线…

识海社区打卡-6

这场掉回灰名了,本来必然上大分,原因无他-查寝 先来查波战绩:c题没过纯属是因为被查寝查了室友也是个不知变通的让查寝记我头上了,byd害我赶回去,本来这题必出 看看我最后一发提交错哪了 void solve() {int n;cin >> n;if (n % 2){if (n < 27){cout << -1 …

第七次高级程序语言设计作业

班级:https://edu.cnblogs.com/campus/fzu/2024C 作业要求:https://edu.cnblogs.com/campus/fzu/2024C/homework/13304 学号:102400115 姓名:洪育豪 7.1问题:无7.2问题:无7.3问题:无7.4问题:无 含义说明 int a; - 定义一个普通整型变量。 int a; - 定义一个指向整型变量…

工具“dotnet-cnblog”安装失败。此故障可能由以下原因导致

工具“dotnet-cnblog”安装失败。此故障可能由以下原因导致解决方法 我这边用的wifi 有问题,换到手机热点就好了。本文来自博客园,作者:lanwf,转载请注明原文链接:https://www.cnblogs.com/lccsdncnblogs/p/18549701

idea免费激活到2099年

idea免费激活到2099年 目录idea免费激活到2099年前言一去官网上下载idea二 下载idea激活工具并使用第一步点击scripts(uninstall-all-users.vbs)清除信息第二步点击(install.vbs)安装配置信息第三步打开(idea.vmoptions)拷贝配置信息到 idea配置中三激活idea1复制激活码 …