學習通小工具——下載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,並且給使用者返回值。(感興趣的小夥伴可以試試)

持續更新中。。。

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