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

1.2 作业代码与实现
rows = driver.find_elements(By.XPATH, "//table/tbody/tr")
for row in rows:
cells = row.find_elements(By.TAG_NAME, "td")
if cells:
# 提取并存储数据到数据库
stock_data = {
'bStockNo': cells[1].text,
'sStockName': cells[2].text,
'fLastPrice': cells[4].text,
'fChangePercent': cells[5].text.replace('%', '').strip(),
'fChangeAmount': cells[6].text,
'nVolume': cells[7].text.replace('万', '').strip(), # 移除 '万' 并去除空格
'fTurnover': cells[8].text,
'fAmplitude': cells[9].text.replace('%', '').strip(),
'fHighPrice': cells[10].text,
'fLowPrice': cells[11].text,
'fOpenPrice': cells[12].text,
'fPrevClosePrice': cells[13].text
}
# 转换为适当的数据类型
try:
stock_data['fChangePercent'] = float(stock_data['fChangePercent']) / 100
stock_data['fAmplitude'] = float(stock_data['fAmplitude']) / 100
# 处理成交量,将万转换为实际数值
stock_data['nVolume'] = float(stock_data['nVolume']) * 10000
# 处理成交额,将亿或万转换为实际数值
if '亿' in stock_data['fTurnover']:
stock_data['fTurnover'] = float(stock_data['fTurnover'].replace('亿', '').strip()) * 100000000
elif '万' in stock_data['fTurnover']:
stock_data['fTurnover'] = float(stock_data['fTurnover'].replace('万', '').strip()) * 10000
else:
stock_data['fTurnover'] = float(stock_data['fTurnover'])
except ValueError as e:
print(f"数据转换错误: {stock_data}, 错误: {e}")
continue
1.3 运行结果



1.4 代码解析
- 数据库连接:使用
mysql.connector连接MySQL数据库,并创建一个表来存储股票数据。 - Selenium爬取:使用Selenium打开目标网页,并等待页面加载完成。
- 数据提取:通过Selenium查找表格元素,并提取每一行的数据。
- 数据存储:将提取的数据插入到MySQL数据库中。
1.5 作业心得
通过这个作业,我学会了如何使用Selenium进行网页自动化操作,以及如何将爬取的数据存储到MySQL数据库中。这个过程涉及到了网页的动态加载、元素的查找和等待,以及数据库的操作,非常锻炼我的编程能力和问题解决能力。
二、作业②:爬取中国MOOC网课程资源信息
2.1 要求与目标
- 要求:
- 熟练掌握 Selenium 查找HTML元素、实现用户模拟登录、爬取Ajax网页数据、等待HTML元素等内容。
- 使用Selenium框架+MySQL爬取中国mooc网课程资源信息(课程号、课程名称、学校名称、主讲教师、团队成员、参加人数、课程进度、课程简介)
- 候选网站:中国mooc网:https://www.icourse163.org
- 输出信息:MYSQL数据库存储和输出格式

2.2 作业代码与实现
(登录及爬取页面)
class moocDB:
def __init__(self):
self.con = mysql.connector.connect(
host="localhost",
user="lzt",
password="Lzt270823",
database="MOOCData"
)
self.cursor = self.con.cursor()
def closeDB(self):
self.con.commit()
self.con.close()
def insert(self, cCourse, cCollege, cTeacher, cTeam, cCount, cProcess, cBrief):
print(f"Inserting record: Name={cCourse}, School={cCollege}, Teacher={cTeacher}, Team={cTeam}, Person={cCount}, Jindu={cProcess}, Jianjie={cBrief}")
self.cursor.execute("INSERT INTO CourseInfo (cCourse, cCollege, cTeacher, cTeam, cCount, cProcess, cBrief) VALUES (%s, %s, %s, %s, %s, %s, %s)",
(cCourse, cCollege, cTeacher, cTeam, cCount, cProcess, cBrief))
def login():
login_button = browser.find_element(By.XPATH, '//a[@class="f-f0 navLoginBtn"]')
login_button.click()
frame = browser.find_element(By.XPATH, '//div[@class="ux-login-set-container"]/iframe')
browser.switch_to.frame(frame)
inputUserName = browser.find_element(By.XPATH, '//div[@class="u-input box"][1]/input')
inputUserName.send_keys("19190948081")
inputPasswd = browser.find_element(By.XPATH, '//div[@class="inputbox"]/div[2]/input[2]')
inputPasswd.send_keys("Lzt270823")
login_button = browser.find_element(By.XPATH, '//*[@id="submitBtn"]')
login_button.click()
time.sleep(5)
def next_page():
next_button = browser.find_element(By.XPATH, '//li[@class="ux-pager_btn ux-pager_btn__next"]/a')
next_button.click()
def start_spider(moocdb):
browser.get(url)
count = 0
for i in range(2):
WebDriverWait(browser, 1000).until(EC.presence_of_all_elements_located((By.ID, "j-courseCardListBox")))
time.sleep(random.randint(3, 6))
browser.execute_script('document.documentElement.scrollTop=0')
for link in browser.find_elements(By.XPATH, '//div[@class="u-clist f-bgw f-cb f-pr j-href ga-click"]'):
count += 1
try:
name = link.find_element(By.XPATH, './/span[@class=" u-course-name f-thide"]').text
except:
name = 'none'
try:
school = link.find_element(By.XPATH, './/a[@class="t21 f-fc9"]').text
except:
school = 'none'
try:
teacher = link.find_element(By.XPATH, './/a[@class="f-fc9"]').text
except:
teacher = 'none'
try:
team = link.find_element(By.XPATH, './/span[@class="f-fc9"]').text
except:
team = 'none'
try:
person = link.find_element(By.XPATH, './/span[@class="hot"]').text
if person:
person = int(''.join(filter(str.isdigit, person))) # 提取数字并转换为整数
else:
person = 0
except:
person = 0
try:
jindu = link.find_element(By.XPATH, './/span[@class="txt"]').text
except:
jindu = 'none'
try:
jianjie = link.find_element(By.XPATH, './/span[@class="p5 brief f-ib f-f0 f-cb"]').text
except:
jianjie = 'none'
moocdb.insert(name, school, teacher, team, person, jindu, jianjie)
next_page()
login()
def main():
moocdb = moocDB()
start_spider(moocdb)
moocdb.closeDB()
if __name__ == '__main__':
main()
browser.quit()
2.3 运行结果



2.4 代码解析
- 数据库连接:使用
mysql.connector连接MySQL数据库,并创建一个表来存储课程数据。 - Selenium爬取:使用Selenium打开目标网页,并进行用户登录。
- 数据提取:通过Selenium查找课程列表元素,并提取每一门课程的数据。
- 数据存储:将提取的数据插入到MySQL数据库中。
2.5 作业心得
这个作业让我学会了如何使用Selenium进行用户登录和爬取Ajax网页数据。通过这个作业,我了解到了网页的动态加载和元素的等待,以及如何将爬取的数据存储到数据库中。这个过程非常锻炼我的编程能力和问题解决能力。
三、作业③:大数据实时分析处理实验
3.1 要求与目标
- 要求:
- 掌握大数据相关服务,熟悉Xshell的使用
- 完成文档 华为云_大数据实时分析处理实验手册-Flume日志采集实验(部分)v2.docx 中的任务,即为下面5个任务,具体操作见文档。
- 环境搭建:
- 任务一:开通MapReduce服务
- 实时分析开发实战:
- 任务一:Python脚本生成测试数据
- 任务二:配置Kafka
- 任务三: 安装Flume客户端
- 任务四:配置Flume采集数据
- 输出:
- 实验关键步骤或结果截图。
3.2 关键步骤及结果截图
实验环境搭建
1.1 进入华为云控制台
- 登录华为云(网址:华为云)
- 进入控制台
- 登录成功后点击“控制台”,进入到华为云控制台,选择区域为“北京四”。
![]()
1.2 任务一:开通MapReduce服务
1.打开MRS服务
2.申请集群
3.集群配置:软件配置
4.集群配置:硬件配置
5.配置弹性公网IP
6.集群架构、节点及密码配置
7.集群配置:高级配置
8.确认配置
9.绑定节点弹性IP


10.修改安全组

2.1 任务一:Python脚本生成测试数据
-
编写Python脚本
![]()
![]()
![]()
-
创建存放测试数据的目录
-
测试执行
![]()
2.2 任务二:下载安装并配置Kafka
-
进入MRS Manager集群管理
-
下载Kafka客户端
![]()
![]()
-
校验下载的客户端文件包
![]()
-
安装Kafka运行环境
![]()
![]()
-
安装Kafka客户端
![]()
-
设置环境变量
-
在kafka中创建topic
![]()
-
查看topic信息
![]()
2.3 任务三:安装Flume客户端
-
进入MRS Manager集群管理(同任务2中的步骤1)
-
下载Flume客户端
![]()
-
校验下载的客户端文件包
![]()
-
安装Flume运行环境
![]()
![]()
-
安装Flume客户端
![]()
-
重启Flume服务
![]()
2.4 任务四:配置Flume采集数据
-
修改配置文件
![]()
-
创建消费者消费kafka中的数据
![]()
![]()
3.5 作业心得
这个作业让我学会了如何使用大数据相关服务,包括Kafka和Flume。通过这个作业,我了解到了大数据的实时分析处理流程,包括数据的生成、采集和处理。这个过程非常锻炼我的编程能力和问题解决能力。
总结
通过本次作业,我深入了解了Python爬虫的基本使用方法,包括如何使用Selenium进行网页自动化操作,如何将爬取的数据存储到MySQL数据库中,以及如何使用大数据相关服务进行实时分析处理。这些作业不仅提高了我的编程能力,也增强了我解决实际问题的信心,为未来的学习奠定了良好的基础。























浙公网安备 33010602011771号