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 pymysqlconn = 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"]').textlist.append(count[2:-3])date = driver.find_element(By.XPATH,'//*[@id="course-enroll-info"]/div/div[1]/div[2]/div/span[2]').textlist.append(date)brief = driver.find_element(By.XPATH,'//*[@id="j-rectxt2"]').textlist.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+1driver.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爬取网页信息的综合能力,并学习了华为云平台配置的基本信息。