今天下午碰到有同学问如何快速抓取分析学校的课程表页面,就花了几分钟的时间写了一小段代码来解析,并输出json格式文本。

主要也没用到太多难点,无非是一些正则表达式的匹配而已。没太多值得注意的地方。


table = $("#manualArrangeCourseTable tbody");

ans = []

for (i = 0; i < 91; i++) {
	t = table.find("#TD" + i + "_0")[0];
	if (t == undefined) continue; // No class
	if (t.innerText == "") continue; // No class
	ans.push({
		"text": t.innerText,
		"last": t.rowSpan ? t.rowSpan : 1,
		"courseName": t.innerText.match("^[^\()]*")[0],
		"courseID": t.innerText.match("\\(([^\()]*)\\)")[1],
		"professor": t.innerText.match(" \\(([^\()]*)\\)")[1],
		"weeks": t.innerText.match("\\(([^\()]*)\\)$")[1].match("([^\,]*)\\,")[1],
		"location": t.innerText.match("\\(([^\()]*)\\)$")[1].match("\\,([^\,]*)")[1],
		"weekDay": Math.floor(i / 13) + 1,
		"startClass": Math.floor(i % 13) + 1,
	})
}

console.log(JSON.stringify(ans))

实测效果: