探索異國文化
這幾天閒來無事欣賞外國文化的時候,突發一個奇想,如果能用程序自動幫我搜集資源,那豈不是美滋滋?
而且像一般的網站反扒的技術不一定很高,話不多少,F12看看這個網頁是什麼結構
在視頻空間的這裏,我們找到了這樣一行代碼:
video=http://*******/20170713/eo2lSVtk/hls/index.m3u8
訪問該路徑之後呢,發現下載下來的是一個後綴.m3u8的文件,打開之後全是這種東西:
#EXTINF:8.174833,
SmOBSsZo8089001.ts
#EXTINF:14.748067,
SmOBSsZo8089002.ts
#EXTINF:3.903900,
SmOBSsZo8089003.ts
#EXTINF:10.643967,
SmOBSsZo8089004.ts
#EXTINF:12.412400,
SmOBSsZo8089005.ts
百度了以後呢發現原來這種文件雖然不是視頻文件,但是是視頻文件的一個索引,每一個AV,不不不,每一個視頻都被分成好幾個小段,這個文件就是記錄每個小段地址的東東!!
原來這就是傳說中的番號!!
但是網上的文件能直接看到對應的鏈接地址,但是我這裏爲什麼看不到呢
立馬繼續F12,看一下我點開視頻的時候發出了那些請求
臥槽!!!那個.ts結尾的不就是我下載下來文件裏面對應的序號嗎
這時候我恍然大悟,這個網站通過解析.m3u8文件裏面的配置,不斷的加載每一小段視頻,就能連續的播放完整的視頻了。
這麼說…我解析了文件之後,一直模擬發送請求給這個地址豈不是…..
話不多說,開搞
研究異國文化
解析.m3u8文件
這裏解析這個文件比較簡單,我的思路是從文件中每一行讀取數據,如果不包含字符#代表是有效的地址,把他存到list中
public static List<String> read(String filePath){
List<String> lists = new ArrayList<String>();
try{
File file = new File(filePath);
if(file.isFile() && file.exists()){
InputStreamReader read = new InputStreamReader(new FileInputStream(file));
BufferedReader bufferedReader = new BufferedReader(read);
String lineText = null;
while((lineText = bufferedReader.readLine()) != null){
if(!lineText.contains("#")){
lists.add(lineText);
System.out.println(lineText);
}
}
read.close();
}else{
System.out.println("找不到指定文件");
}
}catch (Exception e) {
System.out.println("讀取出錯");
e.printStackTrace();
}
return lists;
}
下載
拿到每個片段的索引之後,只需要鏈接一下視頻的地址,就可以通過URL的方式進行下載了,這裏主要使用Java的流文件
public static void download(List<String> lists) {
try{
String url = "";
InputStream inputStream;
for(int i=0 ;i<lists.size(); i++){
url = "*****" + lists.get(i);
URL net = new URL(url);
File saveDir = new File("****");
if(!saveDir.exists()){
saveDir.mkdirs();
}
InputStream in = net.openStream();
FileOutputStream fo = new FileOutputStream(new File("****"+ lists.get(i)));
byte[] buf = new byte[1024];
int length = 0;
System.out.println("開始下載:" + url);
while ((length = in.read(buf, 0, buf.length)) != -1) {
fo.write(buf, 0, length);
}
in.close();
fo.close();
System.out.println("下載完成");
}
}catch (Exception e) {
System.out.println("下載失敗");
e.printStackTrace();
}
System.out.println("全部任務下載完成");
}
實戰
然後輕輕點擊你的鼠標,然後你會發現控制檯打出一堆字母
打開設置好的路徑,你會發現有幾百個是有十幾秒的視頻,都是.ts結尾
但是一個電影被分成幾百個片段,自然是不爽,有什麼辦法能讓他們合併成一個呢
請看下文
整理異國文化
這裏就要藉助命令行工具了:使用copy命令
win+R打開命令行工具,使用
copy /b F:\f\*.ts E:\f\new.ts”
這段代碼意思是把前面一個路徑中的以.ts結尾的複製到新的路徑的new.ts中,這樣就合併成一個了
這裏要注意的是原來的.ts文件命名要有規律,因爲我們是從服務器上直接扒下來的,所以順序是遞增的
然後在指定的輸出目錄就可以看到完整的視頻啦!