Python爬虫---中国大学MOOC爬取数据(文中有
Python爬虫爬取中国大学MOOC数据的方法
分析目标网站结构
中国大学MOOC(慕课)网站包含大量公开课程信息,如课程名称、讲师、评分、学习人数等。使用浏览器开发者工具(F12)检查网页结构,确认数据是通过动态加载(AJAX)还是静态HTML呈现。动态内容通常需要分析接口或使用Selenium模拟浏览器行为。
获取课程列表页数据
对于静态页面,可直接使用requests和BeautifulSoup库抓取。动态内容需通过分析XHR请求接口获取JSON数据。示例代码:
import requests
from bs4 import BeautifulSoupurl = "https://www.icourse163.org/"
headers = {"User-Agent": "Mozilla/5.0"}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, "html.parser")
# 解析课程链接或其他元素
courses = soup.find_all("div", class_="course-card")
处理动态加载内容
若数据通过接口返回,使用requests直接调用接口。示例:
api_url = "https://www.icourse163.org/web/j/courseBean.getCoursePanelList.rpc"
params = {"page": 1, "size": 20}
response = requests.get(api_url, params=params, headers=headers)
data = response.json()
# 提取课程信息
for course in data["result"]["list"]:print(course["name"], course["schoolName"])
使用Selenium处理复杂场景
当数据需要交互(如点击翻页)时,用Selenium模拟操作:
from selenium import webdriverdriver = webdriver.Chrome()
driver.get("https://www.icourse163.org/")
# 模拟点击或滚动
element = driver.find_element_by_class_name("course-card")
print(element.text)
driver.quit()
数据存储与反爬策略
将爬取的数据存入CSV或数据库:
import csvwith open("courses.csv", "w", newline="", encoding="utf-8") as f:writer = csv.writer(f)writer.writerow(["课程名", "学校"])for course in courses:writer.writerow([course["name"], course["school"]])
注意事项:
- 遵守网站
robots.txt规则,避免高频请求。 - 添加随机延迟和头部伪装(如
User-Agent轮换)。 - 动态IP或使用代理应对IP封锁。
通过以上方法可高效爬取中国大学MOOC的公开数据,适用于课程分析或学术研究。
