数据采集与融合技术-第四次实践作业
gitee链接:作业4
作业①:
要求:
熟练掌握 Selenium 查找HTML元素、爬取Ajax网页数据、等待HTML元素等内容。
使用Selenium框架+ MySQL数据库存储技术路线爬取“沪深A股”、“上证A股”、“深证A股”3个板块的股票数据信息。
候选网站:东方财富网:http://quote.eastmoney.com/center/gridlist.html#hs_a_board
输出信息:MYSQL数据库存储和输出格式如下,表头应是英文命名例如:序号id,股票代码:bStockNo……,由同学们自行定义设计表头
作业代码:
点击查看代码
from selenium.webdriver.common.by import By
from selenium import webdriver
import pymysql
import time
# 连接到数据库
conn = pymysql.connect(host='localhost', user='root', password='350102', database='gupiao')
cursor = conn.cursor()
# 创建数据库表
cursor.execute("""
CREATE TABLE IF NOT EXISTS 沪深A股 (
序号 VARCHAR(20),
股票代码 VARCHAR(20),
股票名称 VARCHAR(20),
最新报价 VARCHAR(20),
涨跌幅 VARCHAR(20),
涨跌额 VARCHAR(20),
成交量 VARCHAR(20),
成交额 VARCHAR(20),
振幅 VARCHAR(20),
最高 VARCHAR(20),
最低 VARCHAR(20),
今开 VARCHAR(20),
昨收 VARCHAR(20)
)
""")
cursor.execute("""
CREATE TABLE IF NOT EXISTS 上证A股 (
序号 VARCHAR(20),
股票代码 VARCHAR(20),
股票名称 VARCHAR(20),
最新报价 VARCHAR(20),
涨跌幅 VARCHAR(20),
涨跌额 VARCHAR(20),
成交量 VARCHAR(20),
成交额 VARCHAR(20),
振幅 VARCHAR(20),
最高 VARCHAR(20),
最低 VARCHAR(20),
今开 VARCHAR(20),
昨收 VARCHAR(20)
)
""")
cursor.execute("""
CREATE TABLE IF NOT EXISTS 深证A股 (
序号 VARCHAR(20),
股票代码 VARCHAR(20),
股票名称 VARCHAR(20),
最新报价 VARCHAR(20),
涨跌幅 VARCHAR(20),
涨跌额 VARCHAR(20),
成交量 VARCHAR(20),
成交额 VARCHAR(20),
振幅 VARCHAR(20),
最高 VARCHAR(20),
最低 VARCHAR(20),
今开 VARCHAR(20),
昨收 VARCHAR(20)
)
""")
conn.commit()
# SQL 插入语句
sql1 = "INSERT INTO 沪深A股 (序号, 股票代码, 股票名称, 最新报价, 涨跌幅, 涨跌额, 成交量, 成交额, 振幅, 最高, 最低, 今开, 昨收) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
sql2 = "INSERT INTO 上证A股 (序号, 股票代码, 股票名称, 最新报价, 涨跌幅, 涨跌额, 成交量, 成交额, 振幅, 最高, 最低, 今开, 昨收) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
sql3 = "INSERT INTO 深证A股 (序号, 股票代码, 股票名称, 最新报价, 涨跌幅, 涨跌额, 成交量, 成交额, 振幅, 最高, 最低, 今开, 昨收) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
# 初始化 Selenium 浏览器
url = "http://quote.eastmoney.com/center/gridlist.html#hs_a_board"
page = input("请分别输入“沪深 A 股”、“上证 A 股”、“深证 A 股”3 个板块要爬取的页数:")
pagelist = list(map(int, page.split()))
pageA, pageB, pageC = pagelist[0], pagelist[1], pagelist[2]
driver = webdriver.Chrome()
driver.get(url)
# 爬取“沪深 A 股”数据
print("沪深 A 股")
for i in range(pageA):
content = driver.find_elements(By.XPATH, '//*[@id="table_wrapper-table"]/tbody/tr')
for j in content:
data = j.text.split(" ")
values = (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])
cursor.execute(sql1, values)
conn.commit()
next_button = driver.find_element(By.XPATH, '//a[@class="next paginate_button"]')
next_button.click()
time.sleep(2)
# 爬取“上证 A 股”数据
driver.get("http://quote.eastmoney.com/center/gridlist.html#sh_a_board")
print("上证 A 股")
time.sleep(2)
for i in range(pageB):
content = driver.find_elements(By.XPATH, '//*[@id="table_wrapper-table"]/tbody/tr')
for j in content:
data = j.text.split(" ")
values = (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])
cursor.execute(sql2, values)
conn.commit()
next_button = driver.find_element(By.XPATH, '//a[@class="next paginate_button"]')
next_button.click()
time.sleep(2)
# 爬取“深证 A 股”数据
driver.get("http://quote.eastmoney.com/center/gridlist.html#sz_a_board")
print("深证 A 股")
time.sleep(2)
for i in range(pageC):
content = driver.find_elements(By.XPATH, '//*[@id="table_wrapper-table"]/tbody/tr')
for j in content:
data = j.text.split(" ")
values = (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])
cursor.execute(sql3, values)
conn.commit()
next_button = driver.find_element(By.XPATH, '//a[@class="next paginate_button"]')
next_button.click()
time.sleep(2)
# 关闭连接
cursor.close()
conn.close()
driver.quit()
实现结果:
作业②:
要求:
熟练掌握 Selenium 查找HTML元素、实现用户模拟登录、爬取Ajax网页数据、等待HTML元素等内容。
使用Selenium框架+MySQL爬取中国mooc网课程资源信息(课程号、课程名称、学校名称、主讲教师、团队成员、参加人数、课程进度、课程简介)
候选网站:中国mooc网:https://www.icourse163.org
输出信息:MYSQL数据库存储和输出格式
作业代码:
点击查看代码
from selenium.webdriver.common.by import By
from selenium import webdriver
import time
import pymysql
conn = pymysql.connect(host='localhost', user='root', password='350102', database='MOOC')
cursor = conn.cursor()
cursor.execute("CREATE TABLE IF NOT EXISTS mooc("
"Id varchar(20),cCourse varchar(20),"
"cCollege varchar(20),cTeacher varchar(20),"
"cTeam varchar(20),"
"cCount varchar(20),cProcess varchar(50),"
"cBrief varchar(1000))")
conn.commit()
sql = "INSERT INTO mooc (Id,cCourse,cCollege,cTeacher,cTeam,cCount,cProcess,cBrief) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)"
n = 1
user_name = input("请输入你的账号:")
password = input("请输入你的密码:")
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.icourse163.org/")
load = driver.find_element(By.XPATH,'//*[@id="app"]/div/div/div[1]/div[3]/div[3]/div')
load.click()
time.sleep(3)
iframe = 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(iframe)
driver.find_element(By.XPATH,'/html/body/div[2]/div[2]/div[2]/form/div/div[2]/div[2]/input').send_keys(user_name)
driver.find_element(By.XPATH,'/html/body/div[2]/div[2]/div[2]/form/div/div[4]/div[2]/input[2]').send_keys(password)
driver.find_element(By.XPATH,'/html/body/div[2]/div[2]/div[2]/form/div/div[6]/a').click()
time.sleep(5)
driver.switch_to.default_content()
time.sleep(3)
driver.find_element(By.XPATH,'//*[@id="privacy-ok"]').click()
driver.find_element(By.XPATH,'/html/body/div[4]/div[2]/div[1]/div/div/div[1]/div[1]/div[1]/span[1]/a').click()
driver.switch_to.window(driver.window_handles[-1])
for _ in range(2):
for i in range(5):
list = driver.find_element(By.XPATH,f'//*[@id="channel-course-list"]/div/div/div[2]/div[1]/div[{i+1}]/div/div[3]/div[1]').text.split("\n")
driver.find_element(By.XPATH,f'//*[@id="channel-course-list"]/div/div/div[2]/div[1]/div[{i+1}]').click()
driver.switch_to.window(driver.window_handles[-1])
team = driver.find_elements(By.XPATH,'//*[@class="f-fc3"]')
m = []
for j in team:
m.append(j.text)
m = ','.join(m)
list.append(m)
count = driver.find_element(By.XPATH,'//*[@class="count"]').text
list.append(count[2:-3])
date = driver.find_element(By.XPATH,'//*[@id="course-enroll-info"]/div/div[1]/div[2]/div/span[2]').text
list.append(date)
brief = driver.find_element(By.XPATH,'//*[@id="j-rectxt2"]').text
list.append(brief)
values = (n, list[0], list[1], list[2], list[3], list[4], list[5], list[6])
cursor.execute(sql, values)
conn.commit()
n = n+1
driver.close()
driver.switch_to.window(driver.window_handles[-1])
driver.find_element(By.XPATH,'//*[@id="channel-course-list"]/div/div/div[2]/div[2]/div/a[10]').click()
time.sleep(2)
cursor.close()
实现结果:
作业③:
要求:
掌握大数据相关服务,熟悉Xshell的使用
完成文档 华为云_大数据实时分析处理实验手册-Flume日志采集实验(部分)v2.docx 中的任务,即为下面5个任务,具体操作见文档。
环境搭建:
任务一:开通MapReduce服务
实时分析开发实战:
任务一:Python脚本生成测试数据
任务二:配置Kafka
遭遇问题:
咨询助教与华为云工程师皆未解决,故未完成;
任务三: 安装Flume客户端
任务四:配置Flume采集数据
实验心得:
通过这一次的数据采集与融合技术的实验,我提升了自身对于使用Selenium框架+MySQL爬取网页信息的综合能力,并学习了华为云平台配置的基本信息。