102302106-陈昭颖-第四次作业

作业1

实验一:爬取3个板块的股票信息

要求
熟练掌握 Selenium 查找HTML元素、爬取Ajax网页数据、等待HTML元素等内容。
使用Selenium框架+ MySQL数据库存储技术路线爬取“沪深A股”、“上证A股”、“深证A股”3个板块的股票数据信息。
思路
之前的实验中有爬取过东方财富网:http://quote.eastmoney.com/center/gridlist.html#hs_a_board这个的网页信息,但是本次实验要使用Selenium 查找HTML元素,所以思路会不太一样,我的想法是利用代码去执行点击操作,点击每一个板块的按钮然后进行切换然后爬取整页的内容:
image
然后爬取的过程我还是像上次实验一样用了xpath,观察每个要爬取内容的xpath然后得出内容(以前三个为例子)
image
核心代码

#爬取每个板块的代码(逻辑相同)
for btn_xpath, board_name in BOARD_INFO:
    if board_name != "沪深A股":
        WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.XPATH, btn_xpath))
        ).click()
        time.sleep(3)

    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, '//*[@id="mainc"]/div/div/div[4]/table/tbody/tr'))
    )
    rows = driver.find_elements(By.XPATH, '//*[@id="mainc"]/div/div/div[4]/table/tbody/tr')

    # 提取数据+插入MySQL
    for row_idx in range(1, len(rows) + 1):
        data = [board_name]  # 先存板块名
        fields = ["sBoardName"]
        # 提取每个字段
        for field, xpath in FIELD_XPATH:
            try:
                val = driver.find_element(By.XPATH, xpath.format(row_idx)).text.strip()
                data.insert(0, val)
                fields.insert(0, field)
            except:
                data.insert(0, "")
                fields.insert(0, field)
        # 插入SQL
        sql = f"INSERT IGNORE INTO stock_info ({','.join(fields)}) VALUES ({','.join(['%s'] * len(fields))})"
        cursor.execute(sql, data)
    conn.commit()

运行结果:
image
image
image
完整代码:
https://gitee.com/C-Zhaoying/2025_crawl_project/blob/master/hw5p/1/1.py

心得体会

本次实验利用了新学习的Selenium 查找HTML元素,我觉得很有意思,可以利用代码进行一些模拟用户的操作(比如点击相应板块,利用xpath),在之前爬取的时候发现这个网页还可能会出现弹窗广告什么的,可以利用代码点击关闭或者自己手动点击也可以,还是挺有趣的

作业2

实验一:爬取中国mooc网课程资源信息

要求
熟练掌握 Selenium 查找HTML元素、实现用户模拟登录、爬取Ajax网页数据、等待HTML元素等内容。
使用Selenium框架+MySQL爬取中国mooc网课程资源信息(课程号、课程名称、学校名称、主讲教师、团队成员、参加人数、课程进度、课程简介)
思路+核心代码
本次实验要求模拟用户登录,那么就先从界面开始观察,点击登录的按钮
image
根据新的弹窗要切换到新的界面才能找到输入手机号和密码的位置

  frame = WebDriverWait(driver, 15).until(
      EC.presence_of_element_located((By.XPATH, '//*[@id="j-ursContainer-0"]/iframe'))
  )
  driver.switch_to.frame(frame)

然后在相应位置输入自己的手机密码,并点击登录,注意切换到登陆后的界面要注意切回现有的界面

driver.switch_to.default_content()

进入登陆界面之后同理点击“我的课程按钮”,不过要注意的是登录界面可能会有类似用户授权的弹窗,需要点击同意的按钮,再添加相关函数即可(手动关闭应该也行但我这里是用代码完成)
image
进入我的课程之后先爬取课程简介的url,然后根据url在爬取课程的详细内容数据

WebDriverWait(driver, 20).until(
    EC.presence_of_element_located((By.XPATH, '//div[@id="j-coursewrap"]//a[contains(@href, "/course/")]'))
)

# 爬取指定数量的课程URL
course_urls = []
for i in range(1, COURSE_URL_COUNT + 1):
    try:
        url_xpath = f'//*[@id="j-coursewrap"]/div/div[1]/div[{i}]/div[4]/div[1]/a'
        course_a = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.XPATH, url_xpath))
        )
        course_url = course_a.get_attribute('href')  # 获取URL
        if course_url:  # 过滤空URL
            course_urls.append(course_url)
    except Exception as e:
        continue

爬取课程号、课程名称、学校名称、主讲教师、团队成员、参加人数、课程进度、课程简介

        # 1. 课程名字
        course_name = driver.find_element(
            By.XPATH, '//*[@id="g-body"]/div[1]/div/div/div/div[2]/div[2]/div/div[2]/div[1]/span[1]'
        ).text

        # 2. 课程的学校(取img的alt文本)
        course_university = driver.find_element(
            By.XPATH, '//*[@id="j-teacher"]/div/a/img'
        ).get_attribute('alt')

        # 3. 课程的老师
        teacher = driver.find_element(
            By.XPATH, '//*[@id="j-teacher"]/div/div/div[2]/div/div/div/div/div/h3'
        ).text

        # 4. 课程团队
        team_members = [teacher]  

        # 5. 课程参加人数(仅保留数字)
        enroll_count_text = driver.find_element(
            By.XPATH, '//*[@id="course-enroll-info"]/div/div[1]/div[4]/span[2]'
        ).text
        enroll_count = "".join(filter(str.isdigit, enroll_count_text))

        # 6. 课程进度
        course_progress = driver.find_element(
            By.XPATH, '//*[@id="course-enroll-info"]/div/div[1]/div[2]/div/span[2]'
        ).text

        # 7. 课程简介(整个div的文本)
        course_intro = driver.find_element(
            By.XPATH, '//*[@id="content-section"]/div[4]/div'
        ).text.strip()

        # 存入数据
        course_data.append({
            "cCourse": course_name,  
            "cCollege": course_university,  
            "cTeacher": teacher,  
            "cTeam": "、".join(team_members), 
            "cCount": enroll_count,  
            "cProcess": course_progress,  
            "cBrief": course_intro  
        })

运行结果
image
image
完整代码:
https://gitee.com/C-Zhaoying/2025_crawl_project/blob/master/hw5p/2/2.py

心得体会

本次实验是进行了一次模拟用户登录的操作,主要遇到了挺多bug的,比如点击登录的时候要在新的面板上进行操作,不然我们自己的手机号和密码是输入不进去的,还有就是登录之后还要对弹窗进行关闭,和界面得切换回来,不然也是会报错的,在爬取课程内容的时候要选中他们的课程简介的url,再拆解一个一个进行爬取(但底层逻辑都相同),还是很有意思的,但是要多点耐心去进行爬取

作业3

任务:完成文档 华为云_大数据实时分析处理实验手册-Flume 日志采集实验

要求
掌握大数据相关服务,熟悉Xshell的使用
完成文档 华为云_大数据实时分析处理实验手册-Flume日志采集实验(部分)v2.docx 中的任务,即为下面5个任务,具体操作见文档。
环境搭建:
任务一:开通MapReduce服务
实时分析开发实战:
任务一:Python脚本生成测试数据
任务二:配置Kafka
任务三: 安装Flume客户端
任务四:配置Flume采集数据
实验过程
环境搭建:
任务一:开通MapReduce服务

image
image
实时分析开发实战:
任务一:Python脚本生成测试数据
测试成功示例:
image
任务二:配置Kafka
Kafka的IP:
image
配置成功示例:
image
任务三: 安装Flume客户端
下载Flume客户端
image
image
image
Flume下载成功:
image
服务重启成功,安装结束!
image
任务四:配置Flume采集数据
显示消费数据如下:
表明Flume到Kafka目前是打通的
image

心得体会

本次实验我学会了在华为云平台进行数据的实时分析处理,按照手册上一步一步来是没什么问题的

posted @ 2025-12-10 11:38  陈昭颖  阅读(0)  评论(0)    收藏  举报