数据采集与融合技术-第四次实践作业

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爬取网页信息的综合能力,并学习了华为云平台配置的基本信息。

posted @ 2024-11-16 14:13  だいてんぐ  阅读(4)  评论(0编辑  收藏  举报