数据采集与融合技术作业4

作业①:

1)使用Selenium框架+ MySQL数据库存储技术路线爬取“沪深A股”、“上证A股”、“深证A股”3个板块的股票数据信息。

代码解析

class Stock:
    def getStockData(self):
        chrome_options = Options()
        chrome_options.add_argument('--headless')
        chrome_options.add_argument('--disable-gpu')
        driver = webdriver.Chrome(options=chrome_options)
        driver.get("http://quote.eastmoney.com/center/gridlist.html#sz_a_board")
        
        # Use the correct way to find elements in Selenium 4
        trs = driver.find_elements(By.XPATH, '//tbody/tr')  # Updated line
        
        stocks = []
        for tr in trs:
            tds = tr.find_elements(By.XPATH, './td')  # Updated line
            td = [x.text for x in tds]
            stocks.append(td)

        stockInfo = []
        for stock in stocks:
            stockInfo.append((stock[0], stock[1], stock[2], stock[4], stock[5], stock[6], stock[7], stock[8], stock[9],
                               stock[10], stock[11], stock[12],stock[13]))
        driver.quit()  # Close the browser after data extraction
        return stockInfo
  • 启动一个无头的Chrome浏览器并访问指定的股票数据网页。
  • 使用Selenium抓取网页中每一行股票数据。
  • 提取特定的列并将其整理成元组。
  • 最终返回一个包含所有股票信息的列表。

输出结果



Gitee文件夹链接

2)心得体会

  • Selenium 强大的自动化能力不仅仅适用于网页抓取,也可以应用于自动化测试,这让我对自动化工具的应用有了更深的理解。

作业②

1)使用Selenium框架+MySQL爬取中国mooc网课程资源信息(课程号、课程名称、学校名称、主讲教师、团队成员、参加人数、课程进度、课程简介)

代码解析

def login():
    chromedriver_autoinstaller.install()

    driver = webdriver.Chrome()
    driver.get("https://www.icourse163.org")
    
    # 等待页面加载完成,等待"登录"按钮或其他固定元素出现
    WebDriverWait(driver, 20).until(
        EC.presence_of_element_located((By.LINK_TEXT, "登录"))
    )

    # 确保页面上存在"登录"按钮,尝试点击
    try:
        login_button = driver.find_element(By.LINK_TEXT, "登录")
        login_button.click()
    except Exception as e:
        print("未找到登录按钮:", e)

    # 等待登录页面加载
    time.sleep(2)

    # 输入账号和密码
    username_input = driver.find_element(By.NAME, " ")
    password_input = driver.find_element(By.NAME, " ")
    
    username_input.send_keys(" ")  #  
    password_input.send_keys(" ")  #  

    # 点击登录
    password_input.send_keys(Keys.RETURN)
    time.sleep(5)  # 等待登录完成

    # 处理弹窗(同意按钮)
    try:
        agree_button = WebDriverWait(driver, 5).until(
            EC.element_to_be_clickable((By.XPATH, "//button[contains(text(), '同意')]"))
        )
        agree_button.click()
        time.sleep(2)
    except Exception as e:
        print("未发现同意弹窗,跳过该步骤。")

    return driver
  • 使用 Selenium 模拟登录到中国 MOOC 网站。
  • 采用了显性等待(WebDriverWait)来处理元素加载
def extract_course_info(driver):
    # 获取所有课程的元素
    course_elements = driver.find_elements(By.CSS_SELECTOR, ".course-card-container .course-card")

    course_data = []
    
    for course in course_elements:
        try:
            course_id = course.get_attribute("data-id")  # 课程 ID
            course_name = course.find_element(By.CSS_SELECTOR, ".course-card-name").text  # 课程名称
            school_name = course.find_element(By.CSS_SELECTOR, ".course-card-school").text  # 学校名称
            teacher_name = course.find_element(By.CSS_SELECTOR, ".course-card-teacher").text  # 主讲教师
            team_members = course.find_element(By.CSS_SELECTOR, ".course-card-team").text  # 团队成员
            participants = course.find_element(By.CSS_SELECTOR, ".course-card-participants").text  # 参加人数
            progress = course.find_element(By.CSS_SELECTOR, ".course-card-progress").text  # 课程进度
            description = course.find_element(By.CSS_SELECTOR, ".course-card-description").text  # 课程简介

            course_info = {
                "课程号": course_id,
                "课程名称": course_name,
                "学校名称": school_name,
                "主讲教师": teacher_name,
                "团队成员": team_members,
                "参加人数": participants,
                "课程进度": progress,
                "课程简介": description
            }
            course_data.append(course_info)
        except Exception as e:
            print(f"Error extracting data for one course: {e}")
    
    return course_data
  • 获取所有课程模块,遍历每个课程提取信息,如课程名、学校、教师等

输出结果


Gitee文件夹链接

2)心得体会

  • Selenium 提供了一套强大而灵活的 API,使得我能够模拟真实用户的浏览行为,执行一系列操作,避免了不必要的图形界面加载,提高了抓取效率。

作业③:

1)完成文档 华为云_大数据实时分析处理实验手册-Flume日志采集实验(部分)v2.docx 中的任务

  • Python脚本生成测试数据

  • 配置Kafka

  • 安装Flume客户端

  • 配置Flume采集数据

posted @ 2024-11-18 18:11  xhbyq  阅读(1)  评论(0编辑  收藏  举报