作业①
爬取股票信息实验
- 实验要求
熟练掌握 Selenium 查找 HTML 元素、爬取 Ajax 网页数据、等待 HTML 元素等内容。使用 Selenium 框架+ MySQL 数据库存储技术路线爬取“沪深 A 股”、“上证 A 股”、“深证 A 股”3 个板块的股票数据信息。 - 输出信息:
:MYSQL 数据库存储和输出格式如下,表头应是英文命名例如:序号id,股票代码:bStockNo……,由同学们自行定义设计表头:
| 序号 | 股票代码 | 股票名称 | 最新报价 | 涨跌幅 | 涨跌额 | 成交量 | 振幅 | 最高 | 最低 | 今开 | 昨收 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 688093 | N世华 | 28.47 | 10.92 | 26.13万 | 7.6亿 | 22.34 | 32.0 | 28.08 | 30.20 | 17.55 |
- 具体实现
代码思路:

gitee文件夹链接
代码展示:
单线程:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
import pymysql
from selenium.webdriver.common.by import By
class MySpider:
headers = {
"User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; en-US; rv:1.9pre) Gecko/2008072421 Minefield/3.0.2pre"
}
def __init__(self):
print("正在初始化爬虫...")
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
self.driver = webdriver.Chrome(options=chrome_options)
self.page = 1
try:
# 连接数据库
self.con = pymysql.connect(port=3307, user="root", passwd="123456", charset="utf8", db="gp")
self.cursor = self.con.cursor()
try:
# 如果表存在,先删除表
self.cursor.execute("DROP TABLE IF EXISTS shares")
except Exception as err:
print(err)
try:
# 创建股票表
sql = """CREATE TABLE IF NOT EXISTS shares(
序号 VARCHAR(8),
股票代码 VARCHAR(8),
股票名称 VARCHAR(10),
最新报价 VARCHAR(8),
涨跌幅 VARCHAR(8),
涨跌额 VARCHAR(8),
成交量 VARCHAR(64),
成交额 VARCHAR(64),
振幅 VARCHAR(8),
最高 VARCHAR(8),
最低 VARCHAR(8),
今开 VARCHAR(8),
昨收 VARCHAR(8)
)ENGINE=InnoDB DEFAULT CHARSET=utf8"""
self.cursor.execute(sql)
except Exception as err:
print(err)
except Exception as err:
print(err)
print("初始化完成。准备选择股票类型。")
def choose(self, url, key):
print("正在选择股票类型...")
self.driver.get(url)
try:
# 根据输入的关键字选择股票类型
path = f"//li[@id='nav_{key}']/a[@href='#{key}']"
click = self.driver.find_elements(by=By.XPATH,value=path)
click.click()
time.sleep(3)
except Exception as err:
print(err)
print("选择完成。准备抓取数据。")
def download(self):
if self.page > 10:
print("数据抓取完成。")
return
print(f"正在抓取第 {self.page} 页数据")
print(self.driver.current_url)
try:
# 获取数据行
rows = self.driver.find_elements(by=By.XPATH,value="//table[@id='table_wrapper-table']//tbody//tr")
for row in rows:
data = row.text.split()
print(data)
self.cursor.execute(
"INSERT INTO shares VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)",
(data[0], data[1], data[2], data[6], data[7], data[8], data[9], data[10], data[11], data[12],
data[13], data[14], data[15])
)
self.con.commit()
try:
self.driver.find_element(by=By.XPATH,value="//a[@class='next paginate_button disable']")
print("数据抓取完成。")
except Exception:
self.page += 1
nextpage = self.driver.find_element(by=By.XPATH,value="//a[@class='next paginate_button']")
nextpage.click()
time.sleep(2)
self.download()
except Exception as err:
print(err)
def process(self, url):
# self.init()
# 定义钥匙库,即对应key对应的用于检索xpath
keydict = {1: "hs_a_board", 2: "sh_a_board", 3: "sz_a_board"}
print("请输入要爬取的股票类型对应的数字编号:")
print("1:沪深A股 2:上证A股 3:深圳A股")
keyno = eval(input())
key = keydict[keyno]
self.choose(url, key)
self.download()
url = "http://quote.eastmoney.com/center/gridlist.html"
spider = MySpider()
spider.process(url)
运行结果:


心得体会
与作业二相比这个实验相对简单,没有要实现登录功能,并且数据也比较好找。这次通过一个类实现多个方法,实现逻辑清晰。并且进一步理解了selenium的好处。
作业②
爬取MOOC网站实验
- 实验要求
熟练掌握 Selenium 查找 HTML 元素、实现用户模拟登录、爬取 Ajax 网页数据、等待 HTML 元素等内容。
使用 Selenium 框架+MySQL 爬取中国 mooc 网课程资源信息(课程号、课程名
称、学校名称、主讲教师、团队成员、参加人数、课程进度、课程简介)
候选网站:东方财富网:中国 mooc 网:https://www.icourse163.org - 输出信息:
| Id | cCourse | cCollege | cTeacher | cTeam | cCount | cProcess | cBrief |
|---|---|---|---|---|---|---|---|
| 1 | Python数据分析与展示 | 北京理工大学 | 嵩天 | 嵩天 | 470 | 2020 年11 月 17日 ~2020 年12 月 29日 | “我们正步入一个数据或许比软件更重要的新时代。——TimO'Reilly” …… |
- 具体实现
代码思路:

gitee文件夹链接
代码展示:
创建数据库
try:
self.con = pymysql.connect(port=3307, user="root", passwd="123456", charset="utf8", db="mooc")
self.cursor = self.con.cursor()
self.cursor.execute("drop table if exists mooc")
sql = """create table mooc(Id varchar(8),cCource varchar(64),cCollege varchar(64),cTeacher varchar(64),
cTeam varchar(64),cCount varchar(64),cBrief varchar(256))ENGINE=InnoDB DEFAULT CHARSET=utf8"""
self.cursor.execute(sql)
print("数据库连接成功,表 'mooc' 创建成功。")
return self.con, self.cursor
except:
pass
登录代码
self.driver.get(loginurl)
# 点击“手机号登录”按钮切换至手机号登录
self.driver.find_element(By.XPATH,"//ul[@class='ux-tabs-underline_hd']//li").click()
# 切换到登录框的frame
self.driver.switch_to.frame(self.driver.find_element(By.XPATH,"//div[@class='ux-login-set-container']/iframe"))
# 输入账号和密码
self.driver.find_element(By.XPATH,"//input[@class='dlemail j-nameforslide']").send_keys(account)
self.driver.find_element(By.XPATH,"//input[@class='j-inputtext dlemail']").send_keys(password)
#点击登录按钮
self.driver.find_element(By.XPATH,"//a[@class='u-loginbtn btncolor tabfocus ']").click()
print("登录成功")
爬取内容代码
while True:
page += 1
print("正在爬取第 {} 页".format(page))
data_list = self.driver.find_elements(By.XPATH, "//div[@class='cnt f-pr']")
time.sleep(2)
for data in data_list:
try:
c_cource = data.find_element(By.XPATH, "./div[@class='t1 f-f0 f-cb first-row']").text
c_college = data.find_element(By.XPATH, ".//a[@class='t21 f-fc9']").text
c_teacher = data.find_element(By.XPATH, ".//a[@class='f-fc9']").text
c_team = data.find_element(By.XPATH, ".//a[@class='f-fc9']").text
c_count = data.find_element(By.XPATH, ".//span[@class='hot']").text
c_brief = data.find_element(By.XPATH, ".//span[@class='p5 brief f-ib f-f0 f-cb']").text
no += 1
self.cursor.execute("insert into mooc values(%s,%s,%s,%s,%s,%s,%s)", (no,
c_cource, c_college,
c_teacher, c_team, c_count,
c_brief))
self.con.commit()
print(c_cource)
except Exception as e:
pass
try:
self.driver.find_element(By.XPATH,
"//li[@class='ux-pager_btn ux-pager_btn__next']/a[@class='th-bk-disable-gh']")
print("爬取完成")
break
except:
next_page = self.driver.find_element(By.XPATH,
"//li[@class='ux-pager_btn ux-pager_btn__next']/a[@class='th-bk-main-gh']")
next_page.click()
time.sleep(3)
except Exception as err:
print(err)
运行结果:


心得体会
本次实验是我觉得比较难的,每次元素的定位不太好取,比较分散,用户登录也是在同学的帮助下才成功实现。再一次感受到了selenium的方便和快捷。
作业③
Flume日志采集实验
-
实验要求
掌握大数据相关服务,熟悉 Xshell 的使用
完成文档 华为云_大数据实时分析处理实验手册-Flume 日志采集实验(部分)v2.docx 中的任务,即为下面 5 个任务,具体操作见文档。 -
具体实现
gitee文件夹链接
环境搭建:
任务一:开通 MapReduce 服务

实时分析开发实战:
任务一:Python 脚本生成测试数据
步骤1 使用Xshell连接服务器并编写python脚本
步骤2 使用mkdir命令在/tmp下创建目录flume_spooldir,我们把Python脚本模拟生成的数据放到此目录下,后面Flume就监控这个文件下的目录,以读取数据。
步骤3 执行Python命令,测试生成100条数据

任务二:配置 Kafka
步骤1 设置环境变量
步骤2 在kafka中创建topic
步骤3 查看topic信息

任务三: 安装 Flume 客户端
步骤1 在MRS集群管理界面,在Flume服务中下载客户端
步骤2 解压下载flume客户端文件!

步骤3 校验文件包
步骤4 解压“MRS_Flume_ClientConfig.tar”文件

步骤5 安装Flume环境变量

步骤6 解压Flume客户端

步骤7 安装Flume客户端
步骤8 重启Flume服务

任务四:配置 Flume 采集数据
运行结果

心得体会
本次作业主要介绍如何使用Flume进行实时流前端数据采集,方便为之后数据处理和数据的可视化,是实时流场景数据流通的部分工作,通过本次实验的学习,使我能够掌握实时场景下,大数据的数据采集能力。