W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
想一鍵爬完 IndonesiaX(或其他 OpenEdX 站點)的全部課程?官方示例 70+ 行已精簡成 20 行中文注釋版,復(fù)制即可跑,直接輸出 JSON!
/courses
開始 → 找所有 /courses/xxx
鏈接 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))
}
步驟 | 命令/操作 | 說明 |
---|---|---|
① 安裝依賴 | go mod init openedx && go get github.com/gocolly/colly/v2 |
一鍵拉庫 |
② 保存文件 | 復(fù)制上方代碼 → main.go |
零配置 |
③ 一鍵爬取 | go run main.go > courses.json |
生成 JSON,可導(dǎo)入 Excel |
[
{
"課程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("...") |
目標(biāo)站點 | 改動 2 處 |
---|---|
edX.org | 把域名和 /courses 換成 www.edx.org/courses |
慕課中國 | 域名 + 選擇器同步調(diào)整 |
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: