2015-11-16 2 views
0

Я пытаюсь изучить веб-соскабливание с использованием python и практиковаться сейчас с загрузкой эпизодов определенного спектакля (Anna Olson's bake - http://www.foodnetwork.ca/shows/bake-with-anna-olson/episode-guide/), который транслируется с сайта. Глядя на сетевой трафик Firebug, я обнаружил, что каждый эпизод загружается небольшими сегментами и начинается с файла m3u8. Я написал код для загрузки файлов m3u8, затем откройте каждый из них в виде текстового файла и откройте и сохраните каждый сегмент в файл mp4. После этого я получил полноразмерные видеофайлы (~ 144 МБ), но когда я их открываю, они не играют, хотя игрок говорит, что у них есть продолжительность.Загрузка видеороликов из ссылок m3u8

Вот часть кода, который открывает каждый текстовый файл, загружает URLs из тэ файла и сохраняет их в файл mp4 с тем же именем

import requests 
import os 
from os.path import isfile, join 

folder = r"C:\food\videos\Bake" 
files=[f for f in os.listdir(folder) if isfile(join(folder,f))] 

for episode in files: 
    fepisode = open(join(folder,episode), 'r') 
    urls = [link for link in fepisode.readlines() if link.startswith("http:")] 
    video_file = open(join(folder,episode.replace("txt","mp4")), "wb") 
    for url in urls: 
     video_link = requests.get(url) 
     if video_link.status_code ==200: 
      for chunk in video_link.iter_content(100): 
       video_file.write(chunk) 
    video_file.close() 

Вот ссылка образец одного из m3u8 файлы:

http://foodnetwork-vh.akamaihd.net/i/501/859/FOOD_BakeWithAnna_E201b_,medium,highest,high,low,lowest,_16x9.mp4.csmil/index_2_av.m3u8?null=

Я пытаюсь понять, чего не хватает, что требуется, чтобы иметь видео игры. Thanks

+0

сегменты не mp4, они тс. – szatmary

+0

Я знаю. Сначала я попытался сохранить все это как .ts, но это не изменило ситуацию. – Amos

ответ

0

Вы пытались requests.get(url, stream=True)?

Также попробуйте:

for chunk in video_link.iter_content(chunk_size=100): 
    if chunk: # filter out keep-alive new chunks 
     video_file.write(chunk) 
video_file.close() 
+0

Да, я пробовал это раньше, но не нашел, что это имело значение. Может быть, потому, что сегменты настолько малы? – Amos

+0

@ Амос, я обновил свой ответ. Пожалуйста, проверьте и проверьте, работает ли это. –

+1

Спасибо, но это все еще проблема. Я не уверен, что понимаю, что должно быть угадано. Если переменная video_link повторяется, не должен ли цикл for заканчиваться в конце итерации и не давать пустой кусок? – Amos