Colly 實戰(zhàn):批量抓取 OpenEdX 課程信息

2025-07-14 18:19 更新

想一鍵爬完 IndonesiaX(或其他 OpenEdX 站點)的全部課程?官方示例 70+ 行已精簡成 20 行中文注釋版,復(fù)制即可跑,直接輸出 JSON!

一、整體思路(先背下來)

  1. 列表頁:從 /courses 開始 → 找所有 /courses/xxx 鏈接
  2. 詳情頁:解析標(biāo)題、起止時間、課程號等字段
  3. 結(jié)果輸出:一次性導(dǎo)出 JSON,Excel 直接打開

二、精簡中文代碼(20 行)

package main


import (
    "encoding/json"
    "fmt"
    "strings"
    "time"


    "github.com/gocolly/colly/v2"
)


// 課程結(jié)構(gòu)體
type Course struct {
    CourseID  string     `json:"課程ID"`
    Name      string     `json:"課程名稱"`
    Number    string     `json:"課程編號"`
    StartDate *time.Time `json:"開始時間"`
    EndDate   *time.Time `json:"結(jié)束時間"`
    URL       string     `json:"課程鏈接"`
}


func main() {
    c := colly.NewCollector(
        colly.AllowedDomains("www.indonesiax.co.id", "indonesiax.co.id"),
        colly.CacheDir("./cache"), // 斷點續(xù)爬
    )


    var courses []Course


    // 1. 課程列表頁 → 進(jìn)入詳情
    c.OnHTML(`a[href^="/courses/"]`, func(e *colly.HTMLElement) {
        e.Request.Visit(e.Attr("href"))
    })


    // 2. 詳情頁解析
    c.OnHTML(`.course-info`, func(e *colly.HTMLElement) {
        title := strings.TrimSpace(strings.Split(e.ChildText(".course-title"), "\n")[0])
        id    := e.ChildAttr("input[name=course_id]", "value")
        start, _ := time.Parse("Jan 02, 2006", e.ChildText(".start-date"))
        end,   _ := time.Parse("Jan 02, 2006", e.ChildText(".final-date"))


        courses = append(courses, Course{
            CourseID:  id,
            Name:      title,
            Number:    e.ChildText(".course-number"),
            StartDate: &start,
            EndDate:   &end,
            URL:       "https://www.indonesiax.co.id/courses/" + id,
        })
    })


    // 3. 啟動
    c.Visit("https://www.indonesiax.co.id/courses")


    // 4. 輸出 JSON
    jsonData, _ := json.MarshalIndent(courses, "", "  ")
    fmt.Println(string(jsonData))
}

三、3 步跑通

步驟 命令/操作 說明
① 安裝依賴 go mod init openedx && go get github.com/gocolly/colly/v2 一鍵拉庫
② 保存文件 復(fù)制上方代碼 → main.go 零配置
③ 一鍵爬取 go run main.go > courses.json 生成 JSON,可導(dǎo)入 Excel

四、結(jié)果示例(courses.json)

[
  {
    "課程ID": "course-v1:ITB+CS101+2024_T1",
    "課程名稱": "Pemrograman Dasar",
    "課程編號": "CS101",
    "開始時間": "2024-01-15T00:00:00Z",
    "結(jié)束時間": "2024-05-15T00:00:00Z",
    "課程鏈接": "https://www.indonesiax.co.id/courses/course-v1:ITB+CS101+2024_T1"
  }
  // …更多課程
]

五、常見問題速查

癥狀 原因 解決
0 條數(shù)據(jù) 選擇器失效 瀏覽器 F12 更新 .course-title 等
日期解析失敗 格式變化 改 time.Parse("2006-01-02", ...)
403 被攔截 缺 UA / 反爬 加 colly.UserAgent("...")

六、1 分鐘換站

目標(biāo)站點 改動 2 處
edX.org 把域名和 /courses 換成 www.edx.org/courses
慕課中國 域名 + 選擇器同步調(diào)整
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號