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

作业1:Selenium 爬取数据任务

1. 作业思路与步骤

Gitee文件夹链接:https://gitee.com/nongchenc/crawl_project/blob/master/作业四/4.1.py
本次作业的任务是使用 Selenium 框架爬取 “沪深A股”“上证A股”“深证A股” 三个板块的股票数据,并存储到 MySQL 数据库中。以下为具体实现步骤:

(1)功能实现

  1. URL与板块设置:为每个股票板块指定其 URL。
  2. Selenium 页面加载与等待
    • 通过 WebDriverWait等待页面数据加载完成。
    • 确保股票列表表格元素可见。
  3. 数据提取
    • 使用 CSS 选择器定位表格行和各列,逐行读取数据。
    • 提取的字段包括:股票代码、名称、最新报价、涨跌幅等。
  4. 数据存储
    • 将爬取的股票数据插入到 MySQL 数据库表 stocks 中,避免重复插入。
  5. 翻页处理
    • 模拟点击下一页按钮,爬取每个板块的前 4 页数据。
    • 遇到无下一页的情况,自动停止。

(2)关键点与优化

  • 异常处理:处理页面加载超时、元素找不到等情况。
  • 数据转换:处理带单位的数字(如“万”“亿”)及特殊字符。
  • 延时策略:在翻页和滚动操作间加入随机延时,避免被封。

(3)运行结果

成功爬取了三个板块的股票数据并存储到数据库中。

2. 部分代码展示与运行截图

以下为部分关键代码及运行截图:

(1)定义转换函数

def convert_to_float(value):
    try:
        if isinstance(value, str):
            value = value.strip()
            if value in ['-', '']:  # 处理 `-` 或空值
                return None
            if '万' in value:
                return float(value.replace('万', '').replace(',', '').strip()) * 10000
            if '亿' in value:
                return float(value.replace('亿', '').replace(',', '').strip()) * 100000000
            if '%' in value:
                return float(value.replace('%', '').strip()) / 100
        return float(value) if value else None
    except (ValueError, TypeError):
        return None

(2)数据提取代码

# 爬取前 4 页的数据
    page = 1
    while page <= 4:
        print(f"正在加载 {board_name} 板块第 {page} 页数据...")

        # 遍历每行股票数据
        rows = driver.find_elements(By.CSS_SELECTOR, "#table_wrapper-table > tbody > tr")
        for row in rows:
            try:
                data = {
                    'sequence': convert_to_float(row.find_element(By.CSS_SELECTOR, "td:nth-child(1)").text),  # 获取序号
                    'bStockNo': row.find_element(By.CSS_SELECTOR, "td:nth-child(2) a").text,
                    'name': row.find_element(By.CSS_SELECTOR, "td:nth-child(3) a").text,
                    #其他数据省略
                }
                print(data)
                save_to_database(data)

(3)运行结果截图

  • 控制台输出:

  • 数据库数据:


3. 作业心得

通过此次作业,学会了使用 Selenium 爬取动态数据,体会到以下几点:

  1. 爬取前分析网站结构非常重要:了解表格 HTML 结构和动态加载方式是关键。
  2. 异常处理与优化:通过处理超时、滚动加载等问题,提升了代码的稳定性。
  3. 结合数据库存储:不仅实现了数据抓取,还巩固了数据库的操作技能。

作业2:中国MOOC网课程信息爬取

1. 作业思路与步骤

Gitee文件夹链接:https://gitee.com/nongchenc/crawl_project/blob/master/作业四/4.2.py

任务目标是爬取中国MOOC网的课程信息,包括课程名称、学校名称、主讲教师、课程简介等,并存储到 MySQL 数据库。

(1)主要步骤

  1. 网站分析
    • 使用浏览器开发者工具,分析课程列表的 HTML 结构。
    • 确定动态数据加载方式,使用 Selenium 模拟用户操作。
  2. 数据提取与处理
    • 对无法直接获取的字段(如团队成员),添加条件处理。
  3. 数据库设计
    • 建立 mooc 数据表,字段包括:课程名称、学校名称、主讲教师、团队成员、参加人数等。
  4. 翻页逻辑
    • 模拟翻页,爬取多个页面的数据。
  5. 异常与优化
    • 加入滚动加载、随机延时,模拟真实用户行为,避免触发反爬机制。

(2)运行结果

爬取了指定页数的课程信息,并成功存入数据库。

2. 部分代码展示与运行截图

(1)课程数据提取代码

for link in browser.find_elements(By.XPATH, '//div[@class="u-clist f-bgw f-cb f-pr j-href ga-click"]'):
    try:
        course_name = link.find_element(By.XPATH, './/span[@class=" u-course-name f-thide"]').text
        school_name = link.find_element(By.XPATH, './/a[@class="t21 f-fc9"]').text
        m_teacher = link.find_element(By.XPATH, './/a[@class="f-fc9"]').text
        process = link.find_element(By.XPATH, './/span[@class="txt"]').text
        introduction = link.find_element(By.XPATH, './/span[@class="p5 brief f-ib f-f0 f-cb"]').text
        save_to_database(course_name, school_name, m_teacher, process, introduction)
    except Exception as e:
        print("数据提取出错:", e)

(2)数据库存储代码

def save_to_database(course_name, school_name, m_teacher, process, introduction):
    conn = pymysql.connect(**db_config)
    cursor = conn.cursor()
    cursor.execute(
        "INSERT INTO mooc (`course`, `college`, `teacher`, `process`, `brief`) "![](https://img2024.cnblogs.com/blog/3512114/202411/3512114-20241119212559537-1673402019.png)
![](https://img2024.cnblogs.com/blog/3512114/202411/3512114-20241119212613950-534024220.png)

        "VALUES (%s, %s, %s, %s, %s)",
        (course_name, school_name, m_teacher, process, introduction)
    )
    conn.commit()
    conn.close()

(3)运行结果截图

  • 控制台输出:

  • 数据库数据:


3. 作业心得

完成中国MOOC网的爬取任务,收获如下:

  1. 爬取动态内容的技巧:掌握了通过 Selenium 处理滚动加载和翻页的策略。
  2. 爬取多字段数据的精细化处理:针对每个字段,使用不同的解析方式,保证数据准确性。
  3. 优化与防反爬:通过延时、禁用图片等方式,减少了被封的风险。

作业3:大数据实验总结

1. 实验内容回顾

本次实验在华为云上完成了以下任务:
登录MRS的master节点服务器

编写Python脚本
创建存放测试数据的目录
执行脚本测试

校验下载的客户端文件包


安装Kafka运行环境


安装Kafka客户端

在kafka中创建topic


安装Flume运行环境

配置Flume采集数据
有数据产生

2. 实验心得

通过实验,深刻理解了大数据日志采集的流程,尤其是 Flume 与 Kafka 的交互。在实践中增强了对实时数据处理架构的理解,同时熟悉了华为云的环境配置流程。


posted @ 2024-11-19 21:34  旺旺cc冰  阅读(11)  评论(0编辑  收藏  举报