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

发布时间 2023-11-12 15:53:45作者: I服了U123

第四次作业

一、作业内容

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

序号

股票代码

股票名称

最新报价

涨跌幅

涨跌额

成交量

成交额

振幅

最高

最低

今开

昨收

1

688093

N世华

28.47

62.22%

10.92

26.13万

7.6亿

22.34

32.0

28.08

30.2

17.55

2......

                       

 1)作业代码和图片:

代码内容:

# 导入selenium
from selenium import webdriver
import time
import pymysql


# 创建浏览器操作对象


path = 'chromedriver.exe'

browser = webdriver.Chrome(path)

# 访问网站
url='https://quote.eastmoney.com/center/gridlist.html#hs_a_board'
browser.get(url)
time.sleep(2)
import sqlite3
# 创建数据表
conn = sqlite3.connect('gupiaowang.db')
cursor = conn.cursor()
cursor.execute('''
create table IF NOT EXISTS  gupiaowang1(
    股票代码 text,
    股票名称 text,
    最新报价 text,
    涨跌幅 text,
    涨跌额 text,
    成交量 text,
    成交额 text,
    振幅 text,
    最高 text,
    最低 text,
    今开 text,
    昨收 text)
''')
for i in range(1,7):
    # print(i)
    # 获取网页的元素

    # 股票代码
    gupiaodaima = browser.find_elements_by_xpath('//tr/td[2]/a')
    # print(gupiaodaima)
    # 股票名称
    gupiaomingcheng = browser.find_elements_by_xpath('//tr/td[3]/a')
    # print(gupiaomingcheng)
    # 最新报价
    zuixinbaojia = browser.find_elements_by_xpath('//tr/td[5]/span')
    # print(zuixinbaojia)
    # 涨跌幅
    zhangdiefu = browser.find_elements_by_xpath('//tr/td[6]/span')
    # print(zhangdiefu)
    # 涨跌额
    zhangdiee = browser.find_elements_by_xpath('//tr/td[7]/span')
    # print(zhangdiee)
    # 成交量
    chengjiaoliang = browser.find_elements_by_xpath('//tr/td[8]')
    # print(chengjiaoliang)
    # 成交额
    chengjiaoe =browser.find_elements_by_xpath('//tr/td[9]')
    # print(chengjiaoe)
    # 振幅
    zhenfu = browser.find_elements_by_xpath('//tr/td[10]')
    # print(zhenfu)
    # 最高
    zuigao = browser.find_elements_by_xpath('//tr/td[11]')
    # print(zuigao)
    # 最低
    zuidi = browser.find_elements_by_xpath('//tr/td[12]')
    # print(zuidi)
    # 今开
    jinkai = browser.find_elements_by_xpath('//tr/td[13]')
    # print(jinkai)
    # 昨收
    zuoshou = browser.find_elements_by_xpath('//tr/td[14]')
    # print(zuoshou)
    for i in range(len(gupiaodaima)):
        # print(gupiaodaima[i].text)
        # print(gupiaomingcheng[i].text)
        # print(zuixinbaojia[i].text)
        # print(zhangdiefu[i].text)
        # print(zhangdiee[i].text)
        # print(chengjiaoliang[i].text)
        # print(chengjiaoe[i].text)
        # print(zhenfu[i].text)
        # print(zuigao[i].text)
        # print(zuidi[i].text)
        # print(jinkai[i].text)
        # print(zuoshou[i].text)
        cursor.execute("INSERT INTO gupiaowang1 (股票代码, 股票名称,最新报价 ,涨跌幅,涨跌额,成交量,成交额,振幅,最高,最低,今开,昨收) VALUES (?, ?, ?, ?,?,?,?,?,?,?,?,?)",(gupiaodaima[i].text, gupiaomingcheng[i].text, zuixinbaojia[i].text, zhangdiefu[i].text, zhangdiee[i].text, chengjiaoliang[i].text, chengjiaoe[i].text, zhenfu[i].text,zuigao[i].text, zuidi[i].text, jinkai[i].text, zuoshou[i].text))
    # 点击上证A股股票按钮
    if i==2:
        # 获取上证A股股票按钮
        pagedown= browser.find_element_by_xpath("//li[@id='nav_sh_a_board']/a")
        # 点击下一页
        pagedown.click()
        time.sleep(2)  # 等待页面加载
    # 点击深证A股股票按钮
    if i==4:
        # 获取深证A股股票按钮
        pagedown= browser.find_element_by_xpath("//li[@id='nav_sz_a_board']/a")
        # 点击下一页
        pagedown.click()
        time.sleep(2)  # 等待页面加载
    # 滑到底部
    js_bottom = 'document.documentElement.scrollTop=10000'
    browser.execute_script(js_bottom)
    time.sleep(2)
    # 获取下一页的按钮
    next = browser.find_element_by_xpath("//div/a[@class='next paginate_button']")
    # 点击下一页
    next.click()
    time.sleep(2)  # 等待页面加载


browser.quit()

conn.commit()
cursor.close()
conn.close()

输出结果图片:

 

2)心得体会:

  Selenium库提供了丰富的方法和功能,可以模拟用户在浏览器中的操作,例如访问网页、点击按钮、滚动页面等。这种自动化操作在数据抓取、网页测试等场景中非常有用。 合理添加等待时间是必要的:在代码中使用time.sleep()方法添加等待时间,以确保页面加载完成或元素能够正确获取。合理的等待时间可以避免因为网络延迟或页面加载速度慢而导致的错误。 数据库操作可以方便地存储和管理数据:使用了数据库进行数据存储,通过创建数据表和插入数据的操作,可以方便地存储和管理所获取的股票数据。数据库操作提供了更结构化和高效的方式来处理数据,同时也方便后续的数据查询和分析。 循环和条件判断实现了访问“沪深A股”、“上证A股”、“深证A股”3个板块的股票数据的操作:通过使用循环和条件判断,代码实现了在不同页面点击按钮进行翻页的功能。这种灵活的控制结构可以适应不同的页面布局和操作需求,使代码能够自动处理多页数据的情况。 JavaScript代码的执行增加了操作的灵活性:通过使用execute_script()方法执行JavaScript代码,可以实现更高级的页面操作,例如滑动页面到底部。这种灵活性使得代码可以应对更多复杂的页面交互需求。
  • 作业②:
  • 要求:
    • 熟练掌握 Selenium 查找HTML元素、实现用户模拟登录、爬取Ajax网页数据、等待HTML元素等内容。
    • 使用Selenium框架+MySQL爬取中国mooc网课程资源信息(课程号、课程名称、学校名称、主讲教师、团队成员、参加人数、课程进度、课程简介)
  • 候选网站:中国mooc网:https://www.icourse163.org
  • 输出信息:MYSQL数据库存储和输出格式

 

 

Id

cCourse

cCollege

cTeacher

cTeam

cCount

cProcess

cBrief

1

Python数据分析与展示

北京理工大学

嵩天

嵩天

470

2020年11月17日 ~ 2020年12月29日

“我们正步入一个数据或许比软件更重要的新时代。——Tim O'Reilly” ……

2......

             

 1)作业代码和图片:

代码内容:

# 导入selenium
from selenium import webdriver
import time
import pymysql

# 创建浏览器操作对象

path = 'chromedriver.exe'

browser = webdriver.Chrome(path)

# 访问网站
url='https://www.icourse163.org/'
browser.get(url)
time.sleep(2)
# 获取文本框的对象
input = browser.find_element_by_xpath("//div[@class='u-baseinputui']/input")

# 在文本框中输入
input.send_keys('Python数据分析与展示')
time.sleep(2)

#获取搜索的按钮
button=browser.find_element_by_xpath("//div/span[@class='u-icon-search2 j-searchBtn']")
# print(button)
# 点击跳转
button.click()
time.sleep(2)
# 获取国家精品课按钮
page = browser.find_element_by_xpath("//label[@title='国家精品课']/div[@class='check_box ux-check_unchecked']")
# 点击
page.click()
time.sleep(2)  # 等待页面加载
# //div[@class="u-clist f-bgw f-cb f-pr j-href ga-click"]//div[@class='t1 f-f0 f-cb first-row']/a[1]/span
# 每页的整页课程信息
pagecourse = browser.find_elements_by_xpath('//div[@class="g-mn1"]')
import sqlite3

# 创建数据表
conn = sqlite3.connect('mooc.db')
cursor = conn.cursor()
cursor.execute('''
create table IF NOT EXISTS  mooc1(
    cCourse text,
    cCollege text,
    cTeacher text,
    cTeam text,
    cCount text,
    cProcess text,
    cBrief text)
''')

for i in pagecourse:
    # print(i)
    # 课程名称
    kechengmingcheng = i.find_element_by_xpath(".//div[@class='t1 f-f0 f-cb first-row']/a[1]/span").text
    # print(kechengmingcheng)
    # 课程学校
    kechengxuexiao = i.find_element_by_xpath(".//a[@class='t21 f-fc9']").text
    # print(kechengxuexiao)
    # 课程老师
    kechenglaoshi = i.find_element_by_xpath(".//div/a[@class='f-fc9']").text
    # print(kechenglaoshi)
    # 课程团队
    try:
        kechengtuandui =  i.find_element_by_xpath(".//div[@class='t2 f-fc3 f-nowrp f-f0']/span[@class='f-fc9']").text
        kechengtuandui = kechenglaoshi+kechengtuandui
    except Exception as err:
        kechengtuandui = kechenglaoshi
    # print(kechengtuandui)
    # 参加人数
    canjiarenshu = i.find_element_by_xpath(".//span[@class='hot']").text
    # print(canjiarenshu)
    # 课程进度
    kechengjindu = i.find_element_by_xpath(".//span[@class='txt']").text
    # print(kechengjindu)
    # 课程概述
    kechenggaishu = i.find_element_by_xpath(".//span[@class='p5 brief f-ib f-f0 f-cb']").text
    # print(kechenggaishu)
    cursor.execute(
        "INSERT INTO mooc1 (cCourse, cCollege,cTeacher ,cTeam,cCount,cProcess,cBrief) VALUES (?, ?, ?, ?,?,?,?)",(kechengmingcheng, kechengxuexiao, kechenglaoshi, kechengtuandui, canjiarenshu,kechengjindu, kechenggaishu))



conn.commit()
cursor.close()
conn.close()
# 获取登录按钮
login = browser.find_element_by_xpath('//a[@class="f-f0 navLoginBtn"]')
# 点击
login.click()
time.sleep(2)  # 等待页面加载
frame = browser.find_element_by_xpath("//div[@class='ux-login-set-container']//iframe")
browser.switch_to.frame(frame)
# 获取文本框的对象
zhanghao = browser.find_element_by_xpath("//input[@class='dlemail j-nameforslide']")

# 在文本框中输入
zhanghao.send_keys('1111')
time.sleep(2)
# 获取文本框的对象
mima = browser.find_element_by_xpath("//input[@class='j-inputtext dlemail']")

# 在文本框中输入
mima.send_keys('1111')
time.sleep(2)
# 获取登录按钮
login = browser.find_element_by_xpath("/html/body/div[2]/div[2]/div[2]/form/div/div[6]/a")
# 点击
login.click()
time.sleep(2)  # 等待页面加载
# 关闭浏览器
browser.quit()

输出结果图片:

 

2)心得体会:

  使用Selenium库进行自动化网页操作非常方便。Selenium提供了丰富的API,可以模拟用户在浏览器中的各种操作,包括点击、输入文本、切换frame等。通过简单的API调用,就能够完成复杂的网页自动化任务。 XPath定位是非常强大和灵活的定位方式。XPath可以通过元素的层级关系、属性、文本内容等多个维度进行定位,可以准确地找到需要的元素。在代码中,通过XPath定位找到了搜索文本框、搜索按钮、课程信息等元素,实现了信息的提取和操作。 数据库的使用方便了数据的存储和管理。代码中使用了数据库,通过建表和插入数据的操作,将提取到的课程信息存储到数据库中。数据库提供了结构化的数据存储和查询功能,方便后续的数据处理和分析。 代码中的等待时间设置很关键。由于网络请求和页面加载需要时间,需要在适当的位置添加等待时间,以确保页面加载完成后再进行后续的操作。在代码中,通过time.sleep()方法设置了适当的等待时间,以保证页面的完全加载。
  • 作业③:
  • 要求:
  • 掌握大数据相关服务,熟悉Xshell的使用
  • 完成文档 华为云_大数据实时分析处理实验手册-Flume日志采集实验(部分)v2.docx 中的任务,即为下面5个任务,具体操作见文档。
  • 环境搭建:
  • 任务一:开通MapReduce服务
  • 实时分析开发实战:
  • 任务一:Python脚本生成测试数据
  • 任务二:配置Kafka
  • 任务三: 安装Flume客户端
  • 任务四:配置Flume采集数据

输出:实验关键步骤或结果截图。

心得体会:

  学习了华为云集群的部署和Flume日志采集实验环境搭建、开发实战以及如何释放云资源