史上最细,Charles抓包工具的基本配置、查找接口的方法、爬取中国大学Mooc整门课程 |
您所在的位置:网站首页 › 搜索搜索一下看 › 史上最细,Charles抓包工具的基本配置、查找接口的方法、爬取中国大学Mooc整门课程 |
今天给大家分享Charles这个软件,讲解基本配置和接口查询操作,最后用一个中国大学mooc的示例来展示Charles在Windows端的用法。内容丰富,技术要点详细,站里面搜索中国大学MOOC爬虫的不是讲了一半就关注公众号的,还是讲了一点的,或者只有代码的,都没我讲的详细,这就是对抗路的细节,欢迎阅读点赞评论收藏! 安装与配置 windows下双击安装进入如下菜单位置,点击 Charles相当于是一种代理服务,监听的端口默认8888 设置端口在 在这个位置设置ssl的监听 有了这个之后界面里拿到的就是提示已开启的,不开启ssl很有可能拿到的都是乱码 有了证书才可以更好当代理,获取ssl数据 下一个指定位置为受信任的证书颁发机构 一路向下,最后显示导入成功 Charles最常用的功能可能是在接口的查找,实现和浏览器F12检查的类似功能,还兼具POSTman的接口测试能力 拿我上次的爬取高德地图搜索结果为例 在开启Charles状态进入高德地图,调整到全国搜索,然后清空Charles界面,搜索海底捞
先记下一个地址编码 再点击进入第二层,点个广东省广州市
通过拦截接口,很容易就能取得数据,这在一些不让调试的网页里功能尤其方便 比如中国大学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是怎么取得的
在Postman里面设置请求头和cookie,直接拿到数据 在里面修改为自己的token和cookie即可使用 数据量大,建议存成文件再读取文件,这个数据里面的units的id就是自己要获取的视频id,但还有个PDF,也是需要的,是课件
根据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="[email protected]|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="[email protected]|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) 提取视频地址接口接下来就根据这两个参数取得视频地址
结果是json文件,只要找到这个数据位置就可以提取视频链接,而且视频连接可以直接访问下载视频 contentType对提取的影响我们再找一门有讨论的 1.先打开你的Charles,做好设置 2.打开浏览器登录中国大学mooc 3.然后进去课程课件列表页面,取得第一个接口,循环chapters的子项目,读取units子项目中的id与类型 3.1 contentType是PDF的,取他的contentid通过下载接口获取下载地址 3.2 如果是视频的,提取id,用接口获取videoid和signature,再通过这两个参数获取视频下载地址 3.3如果是别的那就不处理。 4.文件名称也要提取出来,通过读取下载地址取得数据保存到文件就是完整的课程了。 小结具体的代码这里不写了,算法主要是在第一个课程列表数据的基础上做循环,读取id和内容类型,提取后面的数据。 建议是只要读取到了数据就将链接和名字,文件类型保存下来,最后集中下载,以免卡顿失败。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |