所以想要把影片抓下來看,但又沒辦法直接下載,
所以拖了很久都沒有看,不過這些天突然想到爬蟲應該會有幫助,
所以就找了些教學,雖然跟證交所的方法不同,
但這個教學還是對我來說非常有用:大數學堂
我透過 影片 -> 右鍵 檢查 -> Network 去看封包,
才發現現在根本直接這樣就可以看封包,好像不需要Wireshark呢,
由於他的影片被切成非常非常多的小片段,
我要這樣一個一個下載也真的太麻煩
http://webprovod.twse.com.tw/vod/_definst_/A3/E1/93EBE39C8605-5ECDEA97-CDE7-11E4-A3E1/93EBE39C8605-5ECDEA97-CDE7-11E4-A3E1_ATM.mp4/media_n.ts?memberId=
這是從 Network 看到的實際影音檔的URL,切成 n 個小檔,
先試著透過 python 抓回檔案,就參考這篇,
但我不知道怎麼把 blob 的網址用 python 轉成直接可以下載的位置,
只好退而求其次找出總共切成多少個檔案,
透過迴圈抓再把全部都 append 在一起,
看到很多個 list 檔案就都下載回來看看,
發現 chunklist 就是所有 .ts 檔的 list,
於是就先抓 list 再從中找到最後的 .ts 數字,
再全部接在一起變成一個檔案,
只是檔名我是用檔案的順序數字當檔名,
還要再手動把影片改成相對應的檔名,
而 list.txt 是所有我要下載的檔案的 chunklist URL,
list.txt:
http://webprovod.twse.com.tw/vod/_definst_/83/84/EDD960F18933-B65C93CC-87CA-11E2-8384/EDD960F18933-B65C93CC-87CA-11E2-8384_ATM.mp4/chunklist.m3u8?memberId=
http://webprovod.twse.com.tw/vod/_definst_/83/84/EDD960F18933-0E727C6D-87CF-11E2-8384/EDD960F18933-0E727C6D-87CF-11E2-8384_ATM.mp4/chunklist.m3u8?memberId=
http://webprovod.twse.com.tw/vod/_definst_/83/84/EDD960F18933-A18D5F0E-87D0-11E2-8384/EDD960F18933-A18D5F0E-87D0-11E2-8384_ATM.mp4/chunklist.m3u8?memberId=
http://webprovod.twse.com.tw/vod/_definst_/83/84/EDD960F18933-4674F5BF-87D5-11E2-8384/EDD960F18933-4674F5BF-87D5-11E2-8384_ATM.mp4/chunklist.m3u8?memberId=
http://webprovod.twse.com.tw/vod/_definst_/97/A8/793F3CEAC1CA-3654196E-8B7D-11E2-97A8/793F3CEAC1CA-3654196E-8B7D-11E2-97A8_ATM.mp4/chunklist.m3u8?memberId=
http://webprovod.twse.com.tw/vod/_definst_/83/84/EDD960F18933-4EC1FE51-8A27-11E2-8384/EDD960F18933-4EC1FE51-8A27-11E2-8384_ATM.mp4/chunklist.m3u8?memberId=
http://webprovod.twse.com.tw/vod/_definst_/83/84/EDD960F18933-89FF6612-8A27-11E2-8384/EDD960F18933-89FF6612-8A27-11E2-8384_ATM.mp4/chunklist.m3u8?memberId=
http://webprovod.twse.com.tw/vod/_definst_/86/68/697D81F4E645-B3B54F04-B4B9-11E3-8668/697D81F4E645-B3B54F04-B4B9-11E3-8668_ATM.mp4/chunklist.m3u8?memberId=
http://webprovod.twse.com.tw/vod/_definst_/86/68/697D81F4E645-8E3C1AA5-B4C4-11E3-8668/697D81F4E645-8E3C1AA5-B4C4-11E3-8668_ATM.mp4/chunklist.m3u8?memberId=
http://webprovod.twse.com.tw/vod/_definst_/86/68/697D81F4E645-CB0E8367-B54A-11E3-8668/697D81F4E645-CB0E8367-B54A-11E3-8668_ATM.mp4/chunklist.m3u8?memberId=
http://webprovod.twse.com.tw/vod/_definst_/86/68/697D81F4E645-13B56099-B558-11E3-8668/697D81F4E645-13B56099-B558-11E3-8668_ATM.mp4/chunklist.m3u8?memberId=
http://webprovod.twse.com.tw/vod/_definst_/86/68/697D81F4E645-5EE1795C-B576-11E3-8668/697D81F4E645-5EE1795C-B576-11E3-8668_ATM.mp4/chunklist.m3u8?memberId=
http://webprovod.twse.com.tw/vod/_definst_/A9/54/D357CDC6DA76-0E31956A-16CB-11E4-A954/D357CDC6DA76-0E31956A-16CB-11E4-A954_ATM.mp4/chunklist.m3u8?memberId=
http://webprovod.twse.com.tw/vod/_definst_/A9/54/D357CDC6DA76-0F51D27B-16CB-11E4-A954/D357CDC6DA76-0F51D27B-16CB-11E4-A954_ATM.mp4/chunklist.m3u8?memberId=
http://webprovod.twse.com.tw/vod/_definst_/A9/54/D357CDC6DA76-157C09ED-16CB-11E4-A954/D357CDC6DA76-157C09ED-16CB-11E4-A954_ATM.mp4/chunklist.m3u8?memberId=
http://webprovod.twse.com.tw/vod/_definst_/A9/54/D357CDC6DA76-16F144CE-16CB-11E4-A954/D357CDC6DA76-16F144CE-16CB-11E4-A954_ATM.mp4/chunklist.m3u8?memberId=
http://webprovod.twse.com.tw/vod/_definst_/A3/E1/93EBE39C8605-5ECDEA97-CDE7-11E4-A3E1/93EBE39C8605-5ECDEA97-CDE7-11E4-A3E1_ATM.mp4/chunklist.m3u8?memberId=
http://webprovod.twse.com.tw/vod/_definst_/BD/99/195AEC8E3B81-132F3247-2A92-11E5-BD99/195AEC8E3B81-132F3247-2A92-11E5-BD99_ATM.mp4/chunklist.m3u8?memberId=
http://webprovod.twse.com.tw/vod/_definst_/BD/99/195AEC8E3B81-30F62EA9-2A92-11E5-BD99/195AEC8E3B81-30F62EA9-2A92-11E5-BD99_ATM.mp4/chunklist.m3u8?memberId=
Get_Video.py:
# -*- coding:utf-8 -*-
# file: Get_Video.py
#
import urllib.request as request
name = 0
# 透過播放影片 -> 右鍵 檢查 -> Network -> 找到 chunklist
# 把要抓的影片的 chunklist URL 全部加入 list.txt 中
for line in open("list.txt",'rU'): # 一次讀一行
# fake user agent of Safari
fake_useragent = 'Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25'
req_list = request.Request(line, headers={'User-Agent': fake_useragent})
list_file = request.urlopen(req_list)
# 從 chunk list 裡面抓出切割的影音檔個數
end_num = int(str(list_file.read()).split("media_")[-1].split(".")[0])
for index in range(0, end_num + 1):
# 從 chunk list 的 Request URL 轉成要下載的多個 .ts 檔案 URL
url = "/".join(line.split("/")[:-1]) + "/media_" + str(index) + ".ts?memberId="
print(url)
req = request.Request(url, headers={'User-Agent': fake_useragent})
video_file = request.urlopen(req)
# 把多個 .ts 最終存成一個 .mp4
with open(str(name) + ".mp4",'ab') as file:
file.write(video_file.read())
# 檔名用數字替代 下載完需手動改
name += 1
而最後會下載成 0.mp4, 1.mp4.....等等,
就是照 list.txt 的順序,還要手動改檔名,
應該可以更簡單的自動列出 list.txt,
只是我只有要看這麼幾部 mp4,
只要可以自動下載回 local 端就已經解決我的需求了,
所以就沒有再細究下去了