点我看码云仓库

作业①

**1)作业要求:

  • 熟练掌握 Selenium 查找HTML元素、爬取Ajax网页数据、等待HTML元素等内容。
  • 使用Selenium框架+ MySQL数据库存储技术路线爬取“沪深A股”、“上证A股”、“深证A股”3个板块的股票数据信息。
    输出信息:
    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 ... ... ... ... ... ... ... ... ... ... ... ...

核心代码展示:

def get_stock(url):
    service = Service(
        executable_path=r"C:\Program Files\Google\Chrome\Application\chromedriver.exe")
    driver = webdriver.Chrome(service=service)
    driver.get(url)
    trs = driver.find_elements(By.XPATH, '//tbody/tr')
    stocks = []
    for tr in trs:
        tds = tr.find_elements(By.XPATH, './td')
        td = [x.text for x in tds]
        stocks.append(td)
        # print(stocks[1])
    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]))
    # print(stockInfo)
    for st in stockInfo:
        insertDB.openDB()
        insertDB.insert(st[0], st[1], st[2], st[3], st[4], st[5], st[6], st[7], st[8], st[9], st[10], st[11], st[12])
        insertDB.show()
        insertDB.closeDB()
    return stockInfo

运行图片展示:


2)心得体会:
这个作业让我对Selenium框架有了更深入的了解,尤其是在处理Ajax网页数据爬取时,我学会了如何有效地等待和查找HTML元素。这种技能对于数据采集来说至关重要,因为它帮助我更精确地定位和提取所需的信息。通过实际操作,我也意识到了代码优化的重要性,以及如何通过合理的结构和注释来提高代码的可读性。

作业②

1)作业要求:

  • 熟练掌握 Selenium 查找HTML元素、实现用户模拟登录、爬取Ajax网页数据、等待HTML元素等内容。
  • 使用Selenium框架+MySQL爬取中国mooc网课程资源信息(课程号、课程名称、学校名称、主讲教师、团队成员、参加人数、课程进度、课程简介)
    输出信息:

核心代码展示:
连接mysql

try:
    db = pymysql.connect(host='127.0.0.1', user='root', password='216020', port=3306, database='mooc_data')
    cursor = db.cursor()
    cursor.execute('DROP TABLE IF EXISTS courseMessage')
    sql = '''CREATE TABLE courseMessage(cCourse varchar(64),cCollege varchar(64),cTeacher varchar(16),cTeam varchar(256),cCount varchar(16),
    cProcess varchar(32),cBrief varchar(2048))'''
    cursor.execute(sql)
except Exception as e:
    print(e)

爬取一个页面的数据

def spiderOnePage():
    time.sleep(3)  # 等待页面加载完成
    courses = driver.find_elements(By.XPATH, '//*[@id="channel-course-list"]/div/div/div[2]/div[1]/div')
    current_window_handle = driver.current_window_handle
    for course in courses:
        cCourse = course.find_element(By.XPATH, './/h3').text  # 课程名
        cCollege = course.find_element(By.XPATH, './/p[@class="_2lZi3"]').text  # 大学名称
        cTeacher = course.find_element(By.XPATH, './/div[@class="_1Zkj9"]').text  # 主讲老师
        cCount = course.find_element(By.XPATH, './/div[@class="jvxcQ"]/span').text  # 参与该课程的人数
        cProcess = course.find_element(By.XPATH, './/div[@class="jvxcQ"]/div').text  # 课程进展

        course.click()  # 点击进入课程详情页,在新标签页中打开
        Handles = driver.window_handles  # 获取当前浏览器的所有页面的句柄
        driver.switch_to.window(Handles[1])  # 跳转到新标签页
        time.sleep(3)  # 等待页面加载完成

        # 爬取课程详情数据
        cBrief = driver.find_element(By.XPATH, '//*[@id="j-rectxt2"]').text
        if len(cBrief) == 0:
            cBriefs = driver.find_elements(By.XPATH, '//*[@id="content-section"]/div[4]/div//*')
            cBrief = ""
            for c in cBriefs:
                cBrief += c.text

        # 将文本中的引号进行转义处理,防止插入表格时报错
        cBrief = cBrief.replace('"', r'\"').replace("'", r"\'")
        cBrief = cBrief.strip()

        # 爬取老师团队信息
        nameList = []
        cTeachers = driver.find_elements(By.XPATH, '//div[@class="um-list-slider_con_item"]')
        for Teacher in cTeachers:
            name = Teacher.find_element(By.XPATH, './/h3[@class="f-fc3"]').text.strip()
            nameList.append(name)
        # 如果有下一页的标签,就点击它,然后继续爬取
        nextButton = driver.find_elements(By.XPATH, '//div[@class="um-list-slider_next f-pa"]')
        while len(nextButton) != 0:
            nextButton[0].click()
            time.sleep(3)
            cTeachers = driver.find_elements(By.XPATH, '//div[@class="um-list-slider_con_item"]')
            for Teacher in cTeachers:
                name = Teacher.find_element(By.XPATH, './/h3[@class="f-fc3"]').text.strip()
                nameList.append(name)
            nextButton = driver.find_elements(By.XPATH, '//div[@class="um-list-slider_next f-pa"]')
        cTeam = ','.join(nameList)

        driver.close()  # 关闭新标签页
        driver.switch_to.window(current_window_handle)  # 跳转回原始页面
        try:
            cursor.execute('INSERT INTO courseMessage VALUES ("%s","%s","%s","%s","%s","%s","%s")' % (
            cCourse, cCollege, cTeacher, cTeam, cCount, cProcess, cBrief))
            db.commit()
        except Exception as e:
            print(e)

点击登录按钮

WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH, '//a[@class="f-f0 navLoginBtn"]'))).click()
iframe = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@frameborder="0"]')))
driver.switch_to.frame(iframe)
# 输入账号密码并点击登录按钮
driver.find_element(By.XPATH, '//*[@id="phoneipt"]').send_keys("13559180253")  # 你的手机号码
time.sleep(2)
driver.find_element(By.XPATH, '//*[@class="j-inputtext dlemail"]').send_keys("wuyuzi17.")  # 你的密码
time.sleep(2)
driver.find_element(By.ID, 'submitBtn').click()

运行图片展示:

2)心得体会:
作业②对我是一个挑战,因为它涉及到模拟用户登录和爬取更为复杂的网页数据。在这个过程中,我不仅提升了自己的技术能力,还学会了如何分析和解决遇到的问题。这次经历让我认识到了耐心和细致的重要性,因为每一个小错误都可能导致整个爬虫的失败。同时,我也体会到了团队合作的价值,因为在遇到困难时,与同学们的讨论和交流常常能带来新的解决方案。

作业③

1)作业要求:

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

实验图片展示:
开通MapReduce服务


Python脚本生成测试数据

配置Kafka

安装Flume客户端

配置Flume采集数据

2)心得体会:
任这个作业让我对大数据服务有了更加实际的认识,尤其是在使用Xshell进行操作时,我学会了如何搭建和管理MapReduce服务。这个过程中,我不仅对大数据的实时分析处理有了更深的理解,还掌握了如何配置Kafka和Flume来实现数据的高效采集和传输。这些技能对于处理大规模数据流至关重要。通过实验手册的指导,我逐步完成了各个任务。这次任务不仅提升了我的技术能力,也让我对大数据技术的实际应用有了更加全面的认识。

posted on 2024-11-13 16:43  吴鱼子  阅读(2)  评论(0编辑  收藏  举报