学习通小工具——下载ppt/pdf以及视频(未完成)

(做完后,突然发现之前那篇文章好傻。。。感觉白做了,不过也算是学会了一种自动建ppt的方法吧)

先直接上下载链接吧:
http://d0.ananas.chaoxing.com/download/ + mp4_objectid or ppt/pdf_objectid

ps:最近 互联网+ 项目初步搞完了等着审核,就打算把之前学习通的坑填了,准备做个可视化的小工具;输入课程的url就可以下载ppt/pdf和mp4了。(起初我是没想到爬视频的)

最开始的设计思想是,把该课程的全部内容爬下来。所以首先是想把全部的url爬取下来。
在这里插入图片描述

后来发现做小工具,是给别人用的,别人自己传url就可以了诶。然后就把之前写的全删了。(ps:不过写的时候突然发现也可以爬,爬了之后提供给使用者一个csv更方便传url)

然后接下来,就是这个网站的奇葩之处了。


因为首先需要使用者传入url,所以使用者点击课程进去后,复制url再传入。
然后全部做完后,我传入url测试时,发现传回的结果都是一样的。
仔细一看才发现,进入章节后,更换章节url不会变化。如👇:

在这里插入图片描述

666全部都是动态加载出来的~

行吧,然后我将错就错,打算给使用者一个差的体验(手动滑稽),因为你从当前章节返回再进入你想进的章节url是会变化的。(到时候给用户个说明就行了哈哈)

那么我先爬ppt吧,but…
在这里插入图片描述
没办法,观察下图片的url:
在这里插入图片描述
前面三串没看出什么东西,这么长一坨感觉才是关键。(起初我也只是有很大感觉,后来也确实如此)

然后只有进行search大法了,在Elements中search上面“长长的一串”:

"1 of 4 " 已经get到了想要的东西了;
在这里插入图片描述

但是我接着往下按的时候。

在这里插入图片描述
没错,得到了新的objectid,也就是视频MP4的objectid。

也许看到这里有点蒙?也许会问为什么需要这个objectid呢?

接下来就知道了。

在Network中,我们同样搜索上面的objectid

可以看下列结果,第一个便是结果。后两个是加载pdf的图片。

取出下面的下载链接

下载链接:url= “http://d0.ananas.chaoxing.com/download/” +mp4_id or pdf/ppt_id

那么接下来就是如何爬取这两个id呢?
(ps:其实并不一定是两个id,万一只有mp4没有pdf/ppt,或者只有ppt/pdf没有mp4呢,所以爬取时,也需要进行判断。)

根据前文获得mp4_objectid那里,可以知道那里就是关键。如果爬取下来,既然不会动态爬取,那么就获取到相应的Response后,正则爬取下来吧。

那么这个Response在哪里呢,既然是动态加载的,那么肯定有相应的“指向”。

所以依旧search大法,屡试不爽。那么这次search什么呢?根据最开始的url,可以知道是有三个关键性ID的。如下:
在这里插入图片描述
我们返回,再打开另一个章节,看看哪个id变化了。
(最开始我点的是同一章的内容,发现是chapterID变化了;这里我点了不同章,看看会不会有大的变化)果然还是一样的,印证了想法:只有chapterID变化了
在这里插入图片描述
所以我们在Network中search一下它。

得到两个有用的反馈。

在这里插入图片描述

第一个很明显是加载章节目录标题的静态网页,可以用xpath全部获取到。

第二个则需要细心观察。
preview是空的,我们看看Response

往下翻,就可以看到前面获得mp4_objectID的地方了。(这一段其实查看框架的源代码也能够看到,所以实际上,并不复杂
在这里插入图片描述
在这里插入图片描述
打开后,也可以看到相应部分。


接下来,事情就很简单了。

获取Response后,正则爬取下来。

所以真正的url是:(其实直接查看框架源代码就有的url)

https://mooc1-1.chaoxing.com/knowledge/cards?clazzid=4176672&courseid=201678582&knowledgeid=168298554
后面可以不要//&num=0&ut=s&cpi=46415505&v=20160407-1

正则取id:


file_id=re.findall('"objectid":"(.*?)"',res.text)
total_len=len(file_id)
file_name=re.findall('"name":"(.*?)"',res.text)
if total_len == 2:
    mp4_id=file_id[0]
    ppt_id=file_id[1]
    mp4_name=file_name[0]
    ppt_name = file_name[1]
    print(mp4_name+" "+mp4_id,ppt_name+" "+ppt_id)

elif ".pdf" and ".ppt" in res.text:
    ppt_id=file_id[0]
    ppt_name = file_name[0]
    print(ppt_name+" "+ppt_id)
else:
    mp4_id=file_id[0]
    mp4_name = file_name[0]
    print(mp4_name+" "+mp4_id)

得到结果

DSP 1-1 DSP技术的基本概念.mp4 169e68aa4122f842d4512d61dbe7921c DSP第1章1.1(1).pdf 8418560aa9ce42b0c5de0cab8ebe89f1

故得到了我们想要的结果。

接下来就是如何遍历所有的章节呢?取得所有的id呢?

如何做成可视化,其实已经可以实现了。接下来就是如何传入url,并且给使用者返回值。(感兴趣的小伙伴可以试试)

持续更新中。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章