2023数据采集与融合技术实践四

发布时间 2023-11-07 23:13:30作者: ye23

作业一:

1.实验要求
熟练掌握 Selenium 查找 HTML 元素、爬取 Ajax 网页数据、等待 HTML 元素等内容。
使用 Selenium 框架+ MySQL 数据库存储技术路线爬取“沪深 A 股”、“上证 A 股”、“深证 A 股”3 个板块的股票数据信息。
候选网站:东方财富网:
http://quote.eastmoney.com/center/gridlist.html#hs_a_board
输出信息:MYSQL 数据库存储和输出格式如下,表头应是英文命名例如:序号id,股票代码:bStockNo……,由同学们自行定义设计表头
Gitee 文件夹链接:文件链接
2.代码

from selenium.webdriver.common.by import By
from selenium import webdriver
import pymysql
import time

conn = pymysql.connect(host='localhost',password='123456',user='root',database='spider')
cursor = conn.cursor()
cursor.execute("create table 沪深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 上证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 深证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()
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)"
url = "http://quote.eastmoney.com/center/gridlist.html#hs_a_board"
page = input("请分别输入“沪深 A 股”、“上证 A 股”、“深证 A 股”3 个板块要爬取的页数:")
pagelist = list(map(int, page.split()))
pageA = pagelist[0]
pageB = pagelist[1]
pageC = pagelist[2]
driver = webdriver.Chrome()
driver.get(url)
print("沪深 A 股")
for i in range(pageA):
    content = driver.find_elements(By.XPATH, '//*[@id="table_wrapper-table"]/tbody/tr')
    for j in content:
        list = j.text.split(" ")
        values = (
        list[0], list[1], list[2], list[6], list[7], list[8], list[9], list[10], list[11], list[12], list[13], list[14],
        list[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)


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:
        list = j.text.split(" ")
        values = (
            list[0], list[1], list[2], list[6], list[7], list[8], list[9], list[10], list[11], list[12], list[13],
            list[14],
            list[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)

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:
        list = j.text.split(" ")
        values = (
            list[0], list[1], list[2], list[6], list[7], list[8], list[9], list[10], list[11], list[12], list[13],
            list[14],
            list[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()

3.运行结果:


4.实验心得:
这一次作业不难,但是更加熟练了对pymsql的使用

作业二:

1.实验要求:
熟练掌握 Selenium 查找 HTML 元素、实现用户模拟登录、爬取 Ajax 网页数据、等待 HTML 元素等内容。
使用 Selenium 框架+MySQL 爬取中国 mooc 网课程资源信息(课程号、课程名称、学校名称、主讲教师、团队成员、参加人数、课程进度、课程简介)
候选网站:中国 mooc 网:https://www.icourse163.org
输出信息:MYSQL 数据库存储和输出格式
Gitee 文件夹链接:文件链接

2.代码:

from selenium.webdriver.common.by import By
from selenium import webdriver
import time
import pymysql
n = 1
zhanghao = input("请输入你的账号:")
mima = input("请输入你的密码:")
conn = pymysql.connect(host='localhost', user='root', password='123456', database='spider')
cursor = conn.cursor()
cursor.execute("create table 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)"



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(zhanghao)
driver.find_element(By.XPATH,'/html/body/div[2]/div[2]/div[2]/form/div/div[4]/div[2]/input[2]').send_keys(mima)
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()
conn.close()

3.运行结果:

4.心得体会:
这个作业做了很久,主要是登陆时候涉及到iframe的弹窗知识和新网页切换的知识

作业三:

要求:掌握大数据相关服务,熟悉 Xshell 的使用
完成文档 华为云_大数据实时分析处理实验手册-Flume 日志采集实验(部分)v2.docx 中的任务,即为下面 5 个任务,具体操作见文档。
环境搭建:
任务一:开通 MapReduce 服务

实时分析开发实战:
任务一:Python 脚本生成测试数据

任务二:配置 Kafka

任务三: 安装 Flume 客户端


任务四:配置 Flume 采集数据