《Python 获取MOOC数据信息并存储到数据库》

一、引言

        在当今数字化学习的时代,MOOC网作为一个知名的在线学习平台,提供了丰富多样的课程资源。本文将介绍如何通过 Python 编写代码,实现对MOOC网首页课程信息的抓取,并将相关信息存储到本地数据库中。这样的操作可以帮助我们更好地了解MOOC网的课程分布情况,也为后续的数据分析等工作提供了数据基础。

结果展示(文末附完整代码):

目录

一、引言

结果展示(文末附完整代码):

​编辑

目录

二、准备工作

三、代码实现

(一)定义MuKe类

(二)获取MOOC网首页内容

(三)解析MOOC网首页

(四)解析课程列表

(五)存储到数据库

(六)主运行函数

四、运行代码

五、总结

全部代码:


二、准备工作

        在开始编写代码之前,我们需要确保已经安装了以下几个必要的库:

  1. requests:用于发送 HTTP 请求,获取网页内容。
  2. pymysql:用于连接和操作 MySQL 数据库。
  3. lxml:用于解析 HTML 文档,方便我们从网页中提取所需的数据。

三、代码实现

(一)定义MuKe

        首先,我们创建了一个名为MuKe的类,这个类将包含所有与抓取MOOC网课程信息相关的方法和属性。

# -*- coding:utf-8 -*-
import requests
import pymysql
from lxml import etree


class MuKe(object):
    def __init__(self):
        # 慕课网的基础URL
        self.base_url = "https://www.imooc.com/"
        self.headers = {
           
        }
        self.cookies = {
           
        }
        self.db = pymysql.Connect(
            host='127.0.0.1',
            port=3306,
            user='root',
            password='921108',
            db='fjj'
        )
        self.cursor = self.db.cursor()

        在__init__方法中,我们初始化了一些重要的属性,包括MOOC网的基础 URL、请求头信息、Cookies 信息,以及与本地 MySQL 数据库的连接对象和游标对象。这里假设本地已经安装并启动了 MySQL 数据库,并且创建了名为fjj的数据库,同时设置了相应的用户名和密码。

(二)获取MOOC网首页内容

def get_homepage_content(self):
    """获取慕课网首页内容"""
    response = requests.get(self.base_url, headers=self.headers, cookies=self.cookies)
    return response.text

        这个方法通过requests库发送 GET 请求到MOOC网首页,携带设置好的请求头和 Cookies 信息,然后返回获取到的网页文本内容。

(三)解析MOOC网首页

def parse_homepage(self, resp):
    """解析慕课网首页,获取课程分类、标题和链接等信息"""
    html = etree.HTML(resp)
    data_list = html.xpath('//*[@id="main"]/div[2]/div[1]/div')
    Data = data_list[0:7]
    for data in Data:
        type_ = data.xpath('./div[1]/h2/text()')[0]
        title_list = data.xpath('./div[1]/div/p/a')
        for data_ in title_list:
            title = data_.xpath('./text()')[0]
            href = data_.xpath('./@href')
            if href[0][:2] == '//':
                href = 'https:' + str(href[0])
            else:
                href = 'https:/' + str(href[0])
            self.parse_course_list(type_,title,href)

        在parse_homepage方法中,我们首先使用lxml库的etree.HTML方法将获取到的网页文本内容解析成 HTML 对象。然后通过 XPath 表达式从解析后的 HTML 中提取出课程分类、标题和链接等信息。对于提取到的每个课程链接,我们进一步调用parse_course_list方法来处理该课程的详细信息。

(四)解析课程列表

def parse_course_list(self, type_, title, href):
    print(href)
    try:
        resp = requests.get(href, headers=self.headers, cookies=self.cookies).text
        html = etree.HTML(resp)
        data_list = html.xpath('/html/body/div[@class="main"]/div[1]/ul/li')
        for data in data_list:
            course = data.xpath('./a/p[1]/text()')[0].strip()
            person = data.xpath('./a/p[2]/span/text()')[0].strip()
            price = data.xpath('./a/p[3]/span/text()')[0]
            src = 'https://coding.imooc.com/' + data.xpath('./a/@href')[0]
            # print(type_, title, course, person, price, src)
            self.detail_parse(type_, title, course, person, price, src)
    except:
        print('暂无课程,或出错了。')
        pass

        在parse_course_list方法中,我们针对每个课程链接再次发送 GET 请求获取课程列表页面的内容,并进行解析。从中提取出课程名称、授课教师、价格以及课程详情页的链接等信息,然后将这些信息传递给save_to_db方法进行进一步处理。

(五)存储到数据库

def save_to_db(self,type_, title, course, person, price, status,time_all,src):
    sql = "insert into 慕课网 (type_, title, course, person, price, status,time_all,src) values (%s,%s,%s,%s,%s,%s,%s,%s)"
    params = [(type_, title, course, person, price, status,time_all,src)]
    self.cursor.executemany(sql, params)
    self.db.commit()

   save_to_db方法负责将提取到的课程信息按照指定的格式插入到本地 MySQL 数据库的慕课网表中。这里假设已经在数据库中创建了名为慕课网的表,并且表结构与插入的数据格式相匹配。

(六)主运行函数

def Run(self):
    """主运行函数,协调各个功能函数完成抓取和存储任务"""
    try:
        resp = self.get_homepage_content()
        self.parse_homepage(resp)

    except Exception as e:
        print(f"运行过程中出现错误: {e}")

   Run方法作为主运行函数,首先调用get_homepage_content方法获取MOOC网首页内容,然后将其传递给parse_homepage方法进行解析,从而启动整个抓取和存储课程信息的流程。如果在运行过程中出现任何错误,将会打印出错误信息。

四、运行代码

        在代码的末尾,我们通过以下方式来运行整个程序:

if __name__ == '__main__':
    spider = MuKe()
    spider.Run()

        当我们执行这段代码时,程序就会按照上述各个方法定义的逻辑,依次完成获取MOOC网首页内容、解析首页获取课程链接、解析课程列表和详情信息,并最终将所有信息存储到本地数据库的操作。

五、总结

全部代码:

# -*- coding:utf-8 -*-
import requests
import pymysql
from lxml import etree


class MuKe(object):
    def __init__(self):
        self.base_url = "https://www.imooc.com/"
        self.headers = {
           
        }
        self.cookies = {
            
        }
        self.db = pymysql.Connect(
            host='127.0.0.1',
            port=3306,
            user='root',
            password='921108',
            db='fjj'
        )
        self.cursor = self.db.cursor()

    def get_homepage_content(self):
        """获取慕课网首页内容"""
        response = requests.get(self.base_url, headers=self.headers, cookies=self.cookies)
        return response.text

    def parse_homepage(self, resp):
        """解析慕课网首页,获取课程分类、标题和链接等信息"""
        html = etree.HTML(resp)
        data_list = html.xpath('//*[@id="main"]/div[2]/div[1]/div')
        Data = data_list[0:7]
        for data in Data:
            type_ = data.xpath('./div[1]/h2/text()')[0]
            title_list = data.xpath('./div[1]/div/p/a')
            for data_ in title_list:
                title = data_.xpath('./text()')[0]
                href = data_.xpath('./@href')
                if href[0][:2] == '//':
                    href = 'https:' + str(href[0])
                else:
                    href = 'https:/' + str(href[0])
                self.parse_course_list(type_,title,href)

    def parse_course_list(self, type_, title, href):
        # print(href)
        try:
            resp = requests.get(href, headers=self.headers, cookies=self.cookies).text
            html = etree.HTML(resp)
            data_list = html.xpath('/html/body/div[@class="main"]/div[1]/ul/li')
            for data in data_list:
                course = data.xpath('./a/p[1]/text()')[0].strip()
                person = data.xpath('./a/p[2]/span/text()')[0].strip()
                price = data.xpath('./a/p[3]/span/text()')[0]
                src = 'https://coding.imooc.com/' + data.xpath('./a/@href')[0]
                print(type_, title, course, person, price, src)
                self.save_to_db(type_, title, course, person, price, src)
        except:
            print('暂无课程,或出错了。')
            pass

    def save_to_db(self,type_, title, course, person, price, src):
        sql = "insert into 慕课网 (type_, title, course, person, price, src) values (%s,%s,%s,%s,%s,%s)"
        params = [(type_, title, course, person, price, src)]
        self.cursor.executemany(sql, params)
        self.db.commit()


    def Run(self):
        """主运行函数,协调各个功能函数完成抓取和存储任务"""
        try:
            resp = self.get_homepage_content()
            self.parse_homepage(resp)

        except Exception as e:
            print(f"运行过程中出现错误: {e}")


if __name__ == '__main__':
    spider = MuKe()
    spider.Run()

        通过以上代码,我们实现了一个简单的 Python 程序,可以自动抓取MOOC网首页的课程信息并存储到本地数据库中。当然,在实际应用中,我们可能还需要根据具体需求对代码进行进一步的优化和扩展,比如增加错误处理的完善程度、对数据进行更深入的清洗和分析等。希望这篇博客能够帮助大家了解如何利用 Python 进行网页数据抓取和数据库存储相关的操作。
       请注意,在实际使用中,如果涉及到对网站数据的获取,需要确保遵守相关网站的使用条款和法律法规,避免未经授权的访问和数据滥用等问题,本文仅供交流学习,请勿滥用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值