准备放寒假啦,爬取一些MOOC上的课程爬回家去看。
爬取的课程是北京大学的离散数学概论
其实GitHub有可以直接用的程序 但是我半路出家 不怎么会提交HTTP请求 所以直接用selenium简单粗暴了。
网页解析我用的是BeautifulSoup。
思路其实很简单了,直接在课件网页里面把每一个chapter里的每一个lesson的所有unit里的视频都拿下来就可以了。所以就直接嵌套循环就OK了。
遇到的一些困难:
- 课件部分的两个框都是隐藏的框,所以在模拟浏览器点击
操作之前,都需要用JavaScript修改元素display的值
- 元素的id属性每一次点击都是不一样的,所以在定位元素的时候没有用id属性定位,用了title属性或者其他的属性。
- 另外就是 我没有办法用headless模式爬取网页,应该是我这边的环境问题,不知道各位有没有遇到这种情况。
代码:
# -*- coding:utf-8 -*-
import time
from selenium import webdriver
from bs4 import BeautifulSoup
import re
import json
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument("--disable-gpu")
browser = webdriver.Chrome(executable_path='G:\\chromedriver.exe', options=chrome_options)
browser.get('https://www.icourse163.org/learn/NJTU-1002530017#/learn/content?type=detail&id=1004513821')