【数据采集】获取MOOC课程学习进展

举报
小生凡一 发表于 2021/12/04 09:15:08 2021/12/04
【摘要】 1. 获取MOOC信息 1.1 题目熟练掌握 Selenium 查找HTML元素、实现用户模拟登录、爬取Ajax网页数据、等待HTML元素等内容。使用Selenium框架+MySQL爬取中国mooc网课程资源信息(课程号、课程名称、教学进度、课程状态,课程图片地址),同时存储图片到本地项目根目录下的imgs文件夹中,图片的名称用课程名来存储 1.2 思路 1.2.1 驱动启动引入驱动chr...

1. 获取MOOC信息

1.1 题目

熟练掌握 Selenium 查找HTML元素、实现用户模拟登录、爬取Ajax网页数据、等待HTML元素等内容。
使用Selenium框架+MySQL爬取中国mooc网课程资源信息(课程号、课程名称、教学
进度、课程状态,课程图片地址),同时存储图片到本地项目根目录下的imgs文件夹中,图片的名称用课程名来存储

1.2 思路

1.2.1 驱动启动

  • 引入驱动
chrome_path = r"D:\Download\Dirver\chromedriver_win32\chromedriver_win32\chromedriver.exe"  # 驱动的路径
browser = webdriver.Chrome(executable_path=chrome_path)
  • 发送请求
browser.get('https://www.icourse163.org/')
browser.implicitly_wait(5)
  • 窗口最大化
browser.maximize_window()
  • 扫码登录,也可以获取input框输入,但如果爬取次数太多的话,会有两次的验证码。
browser.find_element_by_xpath('//*[@id="j-topnav"]/div/a').click()
time.sleep(5)

1.2.2 获取信息

  • 跳转个人中心页面

注意:一定要登录之后才能跳转,不然此时浏览器是没有用户信息的,就会没有你学了多久这个数据

    browser.implicitly_wait(10)
    browser.get('https://www.icourse163.org/home.htm?userId=1401537859#/home/course')
    browser.implicitly_wait(10)
  • 滑到底部
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
  • 节点获取
    cCourse = browser.find_elements_by_xpath(
        '//*[@id="j-coursewrap"]/div/div[1]/div/div[1]/a/div[2]/div[1]/div[1]/div/span[2]')
    cCollege = browser.find_elements_by_xpath('//*[@id="j-coursewrap"]/div/div[1]/div/div[1]/a/div[2]/div[1]/div[2]/a')
    cSchedule = browser.find_elements_by_xpath(
        '//*[@id="j-coursewrap"]/div/div[1]/div/div[1]/a/div[2]/div[2]/div[1]/div[1]/div[1]/a/span')
    cImgUrl = browser.find_elements_by_xpath(
        '//*[@id="j-coursewrap"]/div/div[1]/div/div[1]/a/div[1]/img')
    cCourseStatus = browser.find_elements_by_xpath(
        '//*[@id="j-coursewrap"]/div/div[1]/div/div[1]/a/div[2]/div[2]/div[2]')

1.2.3 数据存储

  • 下载图片函数
def download(name,img):
    print(f"正在保存第{name}张图片 路径:{img}")
    resp = requests.get(img)
    with open(f'./imgs/{name}.jpg', 'wb') as f:  # 保存到这个image路径下
        f.write(resp.content)
  • 数据库对象,包括链接数据库与插入数据
class database():
    def __init__(self):
        self.HOSTNAME = '127.0.0.1'
        self.PORT = '3306'
        self.DATABASE = 'scrapy_homeword'
        self.USERNAME = 'root'
        self.PASSWORD = 'root'
        # 打开数据库连接
        self.conn = pymysql.connect(host=self.HOSTNAME, user=self.USERNAME, password=self.PASSWORD,
                                    database=self.DATABASE, charset='utf8')
        # 使用 cursor() 方法创建一个游标对象 cursor
        self.cursor = self.conn.cursor()

    def insertData(self, lt):
        sql = "INSERT INTO mooc(cCourse,cCollege , cSchedule , cCourseStatus ,cImgUrl) " \
              "VALUES ( %s, %s, %s, %s,%s)"
        try:
            self.conn.commit()
            self.cursor.execute(sql, lt)
            print("插入成功")
        except Exception as err:
            print("插入失败", err)
  • 控制台打印
    for Course, College, Schedule, ImgUrl, CourseStatus in zip(cCourse, cCollege, cSchedule, cImgUrl, cCourseStatus):
        print(Course.text, College.text, Schedule.text, ImgUrl.get_attribute("src"), CourseStatus.text)
        download(Course.text,ImgUrl.get_attribute("src"))
        db.insertData([Course.text, College.text, Schedule.text, CourseStatus.text, ImgUrl.get_attribute("src")])

image.png

image.png

image.png

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。