把官方 100+ 行示例拆成 3 步 30 行代碼,中文注釋 + 選擇器速查,零基礎(chǔ)也能 5 分鐘導(dǎo)出 Coursera 課程清單 JSON!
一、整體思路(先背下來)
- 列表收集器:只爬
/browse
→ 拿到所有課程鏈接
- 詳情收集器:深度爬
/learn/xxx
→ 解析標(biāo)題、評分、語言等
- 結(jié)果輸出:一次性導(dǎo)出 JSON,Excel 直接打開
二、完整代碼(中文注釋)
package main
import (
"encoding/json"
"log"
"os"
"strings"
"github.com/gocolly/colly/v2"
)
// 課程結(jié)構(gòu)體(字段與官網(wǎng)一一對應(yīng))
type Course struct {
Title string `json:"課程標(biāo)題"`
URL string `json:"課程鏈接"`
Description string `json:"簡介"`
Creator string `json:"講師"`
Language string `json:"語言"`
Level string `json:"難度"`
Commitment string `json:"時長"`
HowToPass string `json:"考核方式"`
Rating string `json:"評分"`
}
func main() {
// 1. 列表收集器:負(fù)責(zé)翻頁
listC := colly.NewCollector(
colly.AllowedDomains("coursera.org", "www.coursera.org"),
colly.CacheDir("./cache"), // 斷點(diǎn)續(xù)爬
)
// 2. 詳情收集器:負(fù)責(zé)解析
detailC := listC.Clone()
var courses []Course
/* ---------- 列表頁邏輯 ---------- */
// 找到課程卡片 → 觸發(fā)詳情收集器
listC.OnHTML(`a[href*="coursera.org/learn"]`, func(e *colly.HTMLElement) {
courseURL := e.Request.AbsoluteURL(e.Attr("href"))
detailC.Visit(courseURL)
})
/* ---------- 詳情頁邏輯 ---------- */
detailC.OnHTML(`div[id=rendered-content]`, func(e *colly.HTMLElement) {
c := Course{
Title: strings.TrimSpace(e.ChildText(".course-title")),
URL: e.Request.URL.String(),
Description: strings.TrimSpace(e.ChildText("div.content")),
Creator: strings.TrimSpace(e.ChildText("div.creator-names > span")),
}
// 解析表格里的元數(shù)據(jù)
e.ForEach("table.basic-info-table tr", func(_ int, el *colly.HTMLElement) {
key := strings.TrimSpace(el.ChildText("td:first-child"))
val := strings.TrimSpace(el.ChildText("td:nth-child(2)"))
switch key {
case "Language":
c.Language = val
case "Level":
c.Level = val
case "Commitment":
c.Commitment = val
case "How To Pass":
c.HowToPass = val
case "User Ratings":
c.Rating = val
}
})
courses = append(courses, c)
})
/* ---------- 啟動 ---------- */
listC.Visit("https://coursera.org/browse")
// 輸出漂亮 JSON
enc := json.NewEncoder(os.Stdout)
enc.SetIndent("", " ")
enc.Encode(courses)
}
三、3 步運(yùn)行
步驟 |
命令/操作 |
說明 |
① 安裝依賴 |
go mod init coursera && go get github.com/gocolly/colly/v2 |
一鍵拉庫 |
② 保存文件 |
復(fù)制上方代碼 → main.go |
零配置 |
③ 一鍵爬取 |
go run main.go > coursera.json |
生成 JSON,Excel 直接導(dǎo)入 |
四、選擇器速查表(F12 對照即用)
數(shù)據(jù) |
選擇器 |
課程標(biāo)題 |
.course-title |
簡介 |
div.content |
講師 |
div.creator-names > span |
語言/難度等 |
table.basic-info-table tr |
五、常見問題 30 秒排查
癥狀 |
原因 |
解決 |
0 條數(shù)據(jù) |
頁面改版或反爬 |
更新選擇器 / 加 User-Agent |
爬得慢 |
未開異步 |
colly.Async(true) + Limit |
內(nèi)存爆炸 |
列表太多 |
用 queue.New() 分批 |
六、1 分鐘進(jìn)階
需求 |
改動 1 行 |
導(dǎo)出 CSV |
把 JSON 編碼換成 csv.NewWriter |
登錄態(tài) |
先 c.Post("/login", data) 再爬 |
分布式 |
把 cache 換成 Redis(見 Redis 教程) |
更多建議: