今天给大家分享Charles这个软件,讲解基本配置和接口查询操作,最后用一个中国大学mooc的示例来展示Charles在Windows端的用法。内容丰富,技术要点详细,站里面搜索中国大学MOOC爬虫的不是讲了一半就关注公众号的,还是讲了一点的,或者只有代码的,都没我讲的详细,这就是对抗路的细节,欢迎阅读点赞评论收藏!
安装与配置
windows下双击安装
注册
进入如下菜单位置,点击
输入RegisteredName和LicenseKey就成功了,实在找不到的私信我
监听端口设置
Charles相当于是一种代理服务,监听的端口默认8888
设置端口在
https设置
在这个位置设置ssl的监听
添加的提示是空代表匹配所有,所以一般host不写,在port分别添加两个80和443的
有了这个之后界面里拿到的就是提示已开启的,不开启ssl很有可能拿到的都是乱码
安装证书
有了证书才可以更好当代理,获取ssl数据
弹出如下界面,点击安装
不同系统显示的可能不一样,我的win10系统,选本地计算机
下一个指定位置为受信任的证书颁发机构
一路向下,最后显示导入成功
高德地图搜索结果的简单使用示例
Charles最常用的功能可能是在接口的查找,实现和浏览器F12检查的类似功能,还兼具POSTman的接口测试能力
拿我上次的爬取高德地图搜索结果为例
在开启Charles状态进入高德地图,调整到全国搜索,然后清空Charles界面,搜索海底捞
很容易找到接口poilinfo
先记下一个地址编码
再点击进入第二层,点个广东省广州市
很容易就能找到第二个接口
修改搜索参数地区参数为620800
先对着接口右键,选择Compose,调整参数后execute
中国大学Mooc的复杂使用示例
通过拦截接口,很容易就能取得数据,这在一些不让调试的网页里功能尤其方便
比如中国大学mooc,一旦检查F12进去就会卡住
访问课程页面,查看分析拦截数据
这里我们进入一门课,找个课件进去看看
课程目录接口
在这个接口就可以看到课程目录
课件接口
这个接口可以看到PDF的下载地址
textUrl: “http://nos.netease.com/edu-lesson-pdfsrc/A4CDAC2BEB569A2F072C4B3AE568C226-1461046117633?download=1-1%20%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F%E6%A6%82%E8%A7%88.pdf&Signature=yHsUiyCUy2yttYY%2FI0cTXu%2FPHyXq579q077yh%2B5e%2BqQ%3D&Expires=1635670391&NOSAccessKeyId=7db2f370ff9a412987155d36d55a6ead”
视频接口
再打开个视频,找找看,这就是视频
把它链接拿出来访问,明显可以
你把它保存下来就是自己的文件了
https://mooc1vod.stu.126.net/nos/mp4/2016/04/01/1004247136_772bfc6be33643ccadd2c64830a98291_sd.mp4?ak=7909bff134372bffca53cdc2c17adc27a4c38c6336120510aea1ae1790819de8d5aa93e9980aefbd6fb2a3d28ddea177a59bc99dfa83cf4f0e6b8d59f57093403059f726dc7bb86b92adbc3d5b34b1320a4e117deae4fee9b75ded7d7dab3f294cca709eeec35724f15d3e6a182e04cb
这里面的查询参数只有一个ak,点击下一个视频比较
https://mooc1vod.stu.126.net/nos/mp4/2016/04/01/1004250124_7c3978a71fc742b88396c7674fe5691b_sd.mp4?ak=7909bff134372bffca53cdc2c17adc27a4c38c6336120510aea1ae1790819de8d5aa93e9980aefbd6fb2a3d28ddea17722d3f175a31c20accaf76d88254fc9353059f726dc7bb86b92adbc3d5b34b132359c52717280024cfad424ee4db3593cb8ae77e29788836745b7125f174b391
ak还不一样
尝试换ak能不能访问
https://mooc1vod.stu.126.net/nos/mp4/2016/04/01/1004250124_7c3978a71fc742b88396c7674fe5691b_sd.mp4?ak=7909bff134372bffca53cdc2c17adc27a4c38c6336120510aea1ae1790819de8d5aa93e9980aefbd6fb2a3d28ddea177a59bc99dfa83cf4f0e6b8d59f57093403059f726dc7bb86b92adbc3d5b34b1320a4e117deae4fee9b75ded7d7dab3f294cca709eeec35724f15d3e6a182e04c
完全可以,那这就不是问题
视频地址链接接口
那么就找视频链接就可以了
但不用这么麻烦,在这个位置找到了一个接口,直接提供了链接地址,这里是GET方法的接口,下一步直接找参数videoid和signature是怎么取得的
查找videoid和signature参数的取得接口
找到了一个,直接看得到这两个参数,这是个POST请求,数据为
1-1和1-2两个视频间隔为2
再看一个
很明显查的是bizid,看看其他一节有好几个视频的,其他参数有没有变化
两个格子视频的bizid是不一样的
其他参数目前没有变,那么只要取到这个id就可以了
很明显这个id在第一个课程目录的接口就有,在如下位置找到参数,而且这个接口有全部的数据。
这个只需要提供一个termid就可以了,这个直接在网页里就有
相反顺序,到Postman做接口测试
获得课程课件列表
在Postman里面设置请求头和cookie,直接拿到数据
获取这段数据,postman直接生成的代码为
import requests
url = "https://www.icourse163.org/web/j/courseBean.getLastLearnedMocTermDto.rpc?csrfKey=7431f506d0ee4bb39c221e8175414474"
payload='termId=1465787445'
headers = {
'edu-script-token': '7431f506d0ee4bb39c221e8175414474',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
'Origin': 'https://www.icourse163.org',
'sec-fetch-set': 'same-origin',
'sec-fetch-mode': 'cors',
'sec-fetch-dest': 'empty',
'Cookie': 'NTESSTUDYSI=7431f506d0ee4bb39c221e8175414474;EDUWEBDEVICE=3fd0255d74a74b07a8cabdf74ab12ea7;hb_MA-A976-948FFA05E931_source=www.baidu.com;Hm_lvt_77dc9a9d49448cf5e629e5bebaa5500b=1635668943;__yadk_uid=mYcTDWTWoGoLzWXqoriGTcPsGdPtAXsI;WM_NI=%2F%2B0nXcI9jEcRUkPNcwhqvjtQQWBa%2B%2BfcLZ%2FsQPaAqztbF1CSmP1z9MDXjFVS6wFkCX7Ckc8zHFmQRgjppwExBgrYHIjTaU5Q3G%2BHNfGikQk9ujER3PJVqmyZwWAcK40%2BMnc%3D;WM_NIKE=9ca17ae2e6ffcda170e2e6eeb4ef73b1a7ad82bb73a3eb8ea3d45b929f9faff4658987b7b0ed3fe9be97aeea2af0fea7c3b92aedf5008fdb698be7a6a6e25a97b5a0afe27dacafba8bf75b93898e82aa21a6bd84bbae799390afa2f472b8be8ad2c259af90ff9bbc478888a6a7d559f6a98a8cc254f59da584bb728c9aa3b2d16daab0c098c87482b9bebacb43aa8cafb6b85bf199e5a9cd6e85b7a5b2ea33b7b68bb3b25c8a8abf8efc52b5898f84ca40f4f5838fe237e2a3;WM_TID=FMemxP1w3M5BQBRVBQJ%2B5LNifztqPNYh;STUDY_WTR="dm/R7gNnvojJoVsvC61fnLXO75a/qk5IHIKQrU+xinRJxLKAIqhy1eX9BljqSXcUuelHydQDC7xkboGVgAtcIK0dTXOBITAuRINrecku/H4=";NTES_YD_SESS=_SVIA7Fj2_UcQFLVBuKLqQL1MC1Nu90N1Ivn1Yy57nhNfD7CfFQYXmxNTFV4wL0Ij4xao7EJC_VdhaG8fScdSOn0538a8gvkuX.1Cz8GBkrZg__8cNI7zBG7pnxdYy3xgPvLVhLDRZlr_gs7N573At2QeL1W7xQSb0srowkg0uxQO6JexvVePiQUlQmncRTJkpGdA7qiSI8Ryzv_4baa847pByqe.T2hN.wdWUMADyu9E;S_INFO=1635669032|0|0&60##|17701720613;P_INFO=|1635669032|1|imooc|00&99|null&null&null#jis&320600#10#0|&0||17701720613;STUDY_SESS="1DPCVw/hWauGD5psx4uGfs8e64IPoBO70JhuXWh0BwBfFtL/cBubuYsmhWvdipWpAZP7mreUGGiz9aWK2sCz4x12rAXcVNtX5OFC0VFtUy4dsjqELa/dWKM0Kha88QnprgUSYxobmvFeVEtz5mu1JTuSBMQQNyMBqaMr8+5oqK8BD1coOZaIOoFWd3nvhrpQylodCQsDavrWrUk4YSJn3w==";STUDY_INFO="yd.e04f31559de24c6cb@163.com|8|1668085|1635669033430";NETEASE_WDA_UID=1668085#|#1399984756414;MOOC_PRIVACY_INFO_APPROVED=true;hasVolume=true;videoVolume=0.8;Hm_lpvt_77dc9a9d49448cf5e629e5bebaa5500b=1635672902',
'referer': 'https://www.icourse163.org/learn/NJU-1001571004?tid=1465787445',
'Content-Type': 'application/x-www-form-urlencoded'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
在里面修改为自己的token和cookie即可使用
数据量大,建议存成文件再读取文件,这个数据里面的units的id就是自己要获取的视频id,但还有个PDF,也是需要的,是课件
提取课件地址接口
这是1-1的pdf文档,POST请求参数在上
c0-params3就是PDF的id
但是我用postman测试发现起决定性因素的是c0-param0,内容id
尝试去掉其他参数
发现参数不足,调用不了
那就只改变这个参数试一下,发现其他参数不改也是可以的,取到的是1-3的pdf地址,但在上个步骤能够提取到两个id,建议还是两个一起用。
根据contentid取pdf文件的代码如下
import requests
url = "https://www.icourse163.org/dwr/call/plaincall/CourseBean.getLessonUnitLearnVo.dwr"
payload='callCount=1&scriptSessionId=%24%7BscriptSessionId%7D190&httpSessionId=7431f506d0ee4bb39c221e8175414474&c0-scriptName=CourseBean&c0-methodName=getLessonUnitLearnVo&c0-id=0&c0-param0=number%3A1003350046&c0-param1=number%3A3&c0-param2=number%3A0&c0-param3=number%3A1270833706&batchId=1635672902363'
headers = {
'edu-script-token': '7431f506d0ee4bb39c221e8175414474',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
'Origin': 'https://www.icourse163.org',
'sec-fetch-set': 'same-origin',
'sec-fetch-mode': 'cors',
'sec-fetch-dest': 'empty',
'Cookie': 'NTESSTUDYSI=7431f506d0ee4bb39c221e8175414474;EDUWEBDEVICE=3fd0255d74a74b07a8cabdf74ab12ea7;hb_MA-A976-948FFA05E931_source=www.baidu.com;Hm_lvt_77dc9a9d49448cf5e629e5bebaa5500b=1635668943;__yadk_uid=mYcTDWTWoGoLzWXqoriGTcPsGdPtAXsI;WM_NI=%2F%2B0nXcI9jEcRUkPNcwhqvjtQQWBa%2B%2BfcLZ%2FsQPaAqztbF1CSmP1z9MDXjFVS6wFkCX7Ckc8zHFmQRgjppwExBgrYHIjTaU5Q3G%2BHNfGikQk9ujER3PJVqmyZwWAcK40%2BMnc%3D;WM_NIKE=9ca17ae2e6ffcda170e2e6eeb4ef73b1a7ad82bb73a3eb8ea3d45b929f9faff4658987b7b0ed3fe9be97aeea2af0fea7c3b92aedf5008fdb698be7a6a6e25a97b5a0afe27dacafba8bf75b93898e82aa21a6bd84bbae799390afa2f472b8be8ad2c259af90ff9bbc478888a6a7d559f6a98a8cc254f59da584bb728c9aa3b2d16daab0c098c87482b9bebacb43aa8cafb6b85bf199e5a9cd6e85b7a5b2ea33b7b68bb3b25c8a8abf8efc52b5898f84ca40f4f5838fe237e2a3;WM_TID=FMemxP1w3M5BQBRVBQJ%2B5LNifztqPNYh;STUDY_WTR="dm/R7gNnvojJoVsvC61fnLXO75a/qk5IHIKQrU+xinRJxLKAIqhy1eX9BljqSXcUuelHydQDC7xkboGVgAtcIK0dTXOBITAuRINrecku/H4=";NTES_YD_SESS=_SVIA7Fj2_UcQFLVBuKLqQL1MC1Nu90N1Ivn1Yy57nhNfD7CfFQYXmxNTFV4wL0Ij4xao7EJC_VdhaG8fScdSOn0538a8gvkuX.1Cz8GBkrZg__8cNI7zBG7pnxdYy3xgPvLVhLDRZlr_gs7N573At2QeL1W7xQSb0srowkg0uxQO6JexvVePiQUlQmncRTJkpGdA7qiSI8Ryzv_4baa847pByqe.T2hN.wdWUMADyu9E;S_INFO=1635669032|0|0&60##|;P_INFO=|1635669032|1|imooc|00&99|null&null&null#jis&320600#10#0|&0||17701720613;STUDY_SESS="1DPCVw/hWauGD5psx4uGfs8e64IPoBO70JhuXWh0BwBfFtL/cBubuYsmhWvdipWpAZP7mreUGGiz9aWK2sCz4x12rAXcVNtX5OFC0VFtUy4dsjqELa/dWKM0Kha88QnprgUSYxobmvFeVEtz5mu1JTuSBMQQNyMBqaMr8+5oqK8BD1coOZaIOoFWd3nvhrpQylodCQsDavrWrUk4YSJn3w==";STUDY_INFO="yd.e04f31559de24c6cb@163.com|8|1668085|1635669033430";NETEASE_WDA_UID=1668085#|#1399984756414;MOOC_PRIVACY_INFO_APPROVED=true;hasVolume=true;videoVolume=0.8;Hm_lpvt_77dc9a9d49448cf5e629e5bebaa5500b=1635672902',
'referer': 'https://www.icourse163.org/learn/NJU-1001571004?tid=1465787445',
'Content-Type': 'application/x-www-form-urlencoded'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
提取videoid和signature两个参数的接口
接下来测试找videoid和signature的接口
post的参数bizId:1270833705,就是前面取得的课程单元id
通过id取videoid和signature的代码如下,所得格式是json文本,直接可以取到值
import requests
url = "https://www.icourse163.org/web/j/resourceRpcBean.getResourceToken.rpc?csrfKey=7431f506d0ee4bb39c221e8175414474"
payload='bizId=1270833705&bizType=1&contentType=1'
headers = {
'edu-script-token': '7431f506d0ee4bb39c221e8175414474',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
'Origin': 'https://www.icourse163.org',
'sec-fetch-set': 'same-origin',
'sec-fetch-mode': 'cors',
'sec-fetch-dest': 'empty',
'Cookie': 'NTESSTUDYSI=7431f506d0ee4bb39c221e8175414474;EDUWEBDEVICE=3fd0255d74a74b07a8cabdf74ab12ea7;hb_MA-A976-948FFA05E931_source=www.baidu.com;Hm_lvt_77dc9a9d49448cf5e629e5bebaa5500b=1635668943;__yadk_uid=mYcTDWTWoGoLzWXqoriGTcPsGdPtAXsI;WM_NI=%2F%2B0nXcI9jEcRUkPNcwhqvjtQQWBa%2B%2BfcLZ%2FsQPaAqztbF1CSmP1z9MDXjFVS6wFkCX7Ckc8zHFmQRgjppwExBgrYHIjTaU5Q3G%2BHNfGikQk9ujER3PJVqmyZwWAcK40%2BMnc%3D;WM_NIKE=9ca17ae2e6ffcda170e2e6eeb4ef73b1a7ad82bb73a3eb8ea3d45b929f9faff4658987b7b0ed3fe9be97aeea2af0fea7c3b92aedf5008fdb698be7a6a6e25a97b5a0afe27dacafba8bf75b93898e82aa21a6bd84bbae799390afa2f472b8be8ad2c259af90ff9bbc478888a6a7d559f6a98a8cc254f59da584bb728c9aa3b2d16daab0c098c87482b9bebacb43aa8cafb6b85bf199e5a9cd6e85b7a5b2ea33b7b68bb3b25c8a8abf8efc52b5898f84ca40f4f5838fe237e2a3;WM_TID=FMemxP1w3M5BQBRVBQJ%2B5LNifztqPNYh;STUDY_WTR="dm/R7gNnvojJoVsvC61fnLXO75a/qk5IHIKQrU+xinRJxLKAIqhy1eX9BljqSXcUuelHydQDC7xkboGVgAtcIK0dTXOBITAuRINrecku/H4=";NTES_YD_SESS=_SVIA7Fj2_UcQFLVBuKLqQL1MC1Nu90N1Ivn1Yy57nhNfD7CfFQYXmxNTFV4wL0Ij4xao7EJC_VdhaG8fScdSOn0538a8gvkuX.1Cz8GBkrZg__8cNI7zBG7pnxdYy3xgPvLVhLDRZlr_gs7N573At2QeL1W7xQSb0srowkg0uxQO6JexvVePiQUlQmncRTJkpGdA7qiSI8Ryzv_4baa847pByqe.T2hN.wdWUMADyu9E;S_INFO=1635669032|0|0&60##|;P_INFO=17701720613|1635669032|1|imooc|00&99|null&null&null#jis&320600#10#0|&0||17701720613;STUDY_SESS="1DPCVw/hWauGD5psx4uGfs8e64IPoBO70JhuXWh0BwBfFtL/cBubuYsmhWvdipWpAZP7mreUGGiz9aWK2sCz4x12rAXcVNtX5OFC0VFtUy4dsjqELa/dWKM0Kha88QnprgUSYxobmvFeVEtz5mu1JTuSBMQQNyMBqaMr8+5oqK8BD1coOZaIOoFWd3nvhrpQylodCQsDavrWrUk4YSJn3w==";STUDY_INFO="yd.e04f31559de24c6cb@163.com|8|1668085|1635669033430";NETEASE_WDA_UID=1668085#|#1399984756414;MOOC_PRIVACY_INFO_APPROVED=true;hasVolume=true;videoVolume=0.8;Hm_lpvt_77dc9a9d49448cf5e629e5bebaa5500b=1635672902',
'referer': 'https://www.icourse163.org/learn/NJU-1001571004?tid=1465787445',
'Content-Type': 'application/x-www-form-urlencoded'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
提取视频地址接口
接下来就根据这两个参数取得视频地址
这里可以获得不同清晰度的数据,这个链接站点有变化,但没改cookie也可以,videoid和signature都在查询参数里,这是个GET请求
相应代码如下
import requests
url = "https://vod.study.163.com/eds/api/v1/vod/video?videoId=1004247248&signature=59496a6f6d767a5a494e47484641684c54317530775056385467544f5869374c6b4263736153743464504b3133395767513450334f4a4b52486a71756663344577664546454d2b5668782b544c4e6f7a473147496a616f514f4849784339507a42346d394866466f54372f34335439684c44555652355339574c474478736b435470545764726a4378784c3561527a374c76742b45413d3d&clientType=1"
payload='bizId=1270833705&bizType=1&contentType=1'
headers = {
'edu-script-token': '7431f506d0ee4bb39c221e8175414474',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
'Origin': 'https://www.icourse163.org',
'sec-fetch-set': 'same-origin',
'sec-fetch-mode': 'cors',
'sec-fetch-dest': 'empty',
'Cookie': 'NTESSTUDYSI=7431f506d0ee4bb39c221e8175414474;EDUWEBDEVICE=3fd0255d74a74b07a8cabdf74ab12ea7;hb_MA-A976-948FFA05E931_source=www.baidu.com;Hm_lvt_77dc9a9d49448cf5e629e5bebaa5500b=1635668943;__yadk_uid=mYcTDWTWoGoLzWXqoriGTcPsGdPtAXsI;WM_NI=%2F%2B0nXcI9jEcRUkPNcwhqvjtQQWBa%2B%2BfcLZ%2FsQPaAqztbF1CSmP1z9MDXjFVS6wFkCX7Ckc8zHFmQRgjppwExBgrYHIjTaU5Q3G%2BHNfGikQk9ujER3PJVqmyZwWAcK40%2BMnc%3D;WM_NIKE=9ca17ae2e6ffcda170e2e6eeb4ef73b1a7ad82bb73a3eb8ea3d45b929f9faff4658987b7b0ed3fe9be97aeea2af0fea7c3b92aedf5008fdb698be7a6a6e25a97b5a0afe27dacafba8bf75b93898e82aa21a6bd84bbae799390afa2f472b8be8ad2c259af90ff9bbc478888a6a7d559f6a98a8cc254f59da584bb728c9aa3b2d16daab0c098c87482b9bebacb43aa8cafb6b85bf199e5a9cd6e85b7a5b2ea33b7b68bb3b25c8a8abf8efc52b5898f84ca40f4f5838fe237e2a3;WM_TID=FMemxP1w3M5BQBRVBQJ%2B5LNifztqPNYh;STUDY_WTR="dm/R7gNnvojJoVsvC61fnLXO75a/qk5IHIKQrU+xinRJxLKAIqhy1eX9BljqSXcUuelHydQDC7xkboGVgAtcIK0dTXOBITAuRINrecku/H4=";NTES_YD_SESS=_SVIA7Fj2_UcQFLVBuKLqQL1MC1Nu90N1Ivn1Yy57nhNfD7CfFQYXmxNTFV4wL0Ij4xao7EJC_VdhaG8fScdSOn0538a8gvkuX.1Cz8GBkrZg__8cNI7zBG7pnxdYy3xgPvLVhLDRZlr_gs7N573At2QeL1W7xQSb0srowkg0uxQO6JexvVePiQUlQmncRTJkpGdA7qiSI8Ryzv_4baa847pByqe.T2hN.wdWUMADyu9E;S_INFO=1635669032|0|0&60##|;P_INFO=|1635669032|1|imooc|00&99|null&null&null#jis&320600#10#0|&0||17701720613;STUDY_SESS="1DPCVw/hWauGD5psx4uGfs8e64IPoBO70JhuXWh0BwBfFtL/cBubuYsmhWvdipWpAZP7mreUGGiz9aWK2sCz4x12rAXcVNtX5OFC0VFtUy4dsjqELa/dWKM0Kha88QnprgUSYxobmvFeVEtz5mu1JTuSBMQQNyMBqaMr8+5oqK8BD1coOZaIOoFWd3nvhrpQylodCQsDavrWrUk4YSJn3w==";STUDY_INFO="yd.e04f31559de24c6cb@163.com|8|1668085|1635669033430";NETEASE_WDA_UID=1668085#|#1399984756414;MOOC_PRIVACY_INFO_APPROVED=true;hasVolume=true;videoVolume=0.8;Hm_lpvt_77dc9a9d49448cf5e629e5bebaa5500b=1635672902',
'referer': 'https://www.icourse163.org/learn/NJU-1001571004?tid=1465787445',
'Content-Type': 'application/x-www-form-urlencoded'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
结果是json文件,只要找到这个数据位置就可以提取视频链接,而且视频连接可以直接访问下载视频
contentType对提取的影响
我们再找一门有讨论的
可以发现,讨论的contenttype为6,pdf为3,视频为1,这个可以用来区分提取的类型,分别执行pdf函数和视频的函数,这个name参数第一个课程都是PDF,不靠谱,如果以后全课程下载的话建议自定义
提取层次是章节到课程到单元,作业和测试是和课程并列的项目,所以不需要考虑
总结提取的步骤
1.先打开你的Charles,做好设置
2.打开浏览器登录中国大学mooc
3.然后进去课程课件列表页面,取得第一个接口,循环chapters的子项目,读取units子项目中的id与类型
3.1 contentType是PDF的,取他的contentid通过下载接口获取下载地址
3.2 如果是视频的,提取id,用接口获取videoid和signature,再通过这两个参数获取视频下载地址
3.3如果是别的那就不处理。
4.文件名称也要提取出来,通过读取下载地址取得数据保存到文件就是完整的课程了。
小结
具体的代码这里不写了,算法主要是在第一个课程列表数据的基础上做循环,读取id和内容类型,提取后面的数据。
建议是只要读取到了数据就将链接和名字,文件类型保存下来,最后集中下载,以免卡顿失败。