摘录自:LOMOOO “爬取网页的ts视频流”

import requests
import os
from multiprocessing.dummy import Pool
# 在罕见的情况下,你可能想获取来自服务器的原始套接字响应,那么你可以访问 r.raw。 如果你确实想这么干,那请你确保在初始请求中设置了 stream=True。具体你可以这么做:
#
# >>> r = requests.get('https://github.com/timeline.json', stream=True)
# >>> r.raw
# <requests.packages.urllib3.response.HTTPResponse object at 0x101194810>
# >>> r.raw.read(10)
# '\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03'
# 但一般情况下,你应该以下面的模式将文本流保存到文件:
#
# with open(filename, 'wb') as fd:
# for chunk in r.iter_content(chunk_size):
# fd.write(chunk)
# 使用 Response.iter_content 将会处理大量你直接使用 Response.raw 不得不处理的。 当流下载时,上面是优先推荐的获取内容方式。 Note that chunk_size can be freely adjusted to a number that may better fit your use cases.
#chunk_size可以设置你指定的大小,指定每次获取数据的最大值,注意:并不是每次请求回来的content块都是chunk_size指定的大小。

def download(j):
global picpath
url='http://xxx5%s'% str(j).zfill(3)+'.ts'
for l in range(20): #下载失败情况最多20次
try:
retu = requests.get(url, stream=True)
print(str(j).zfill(3)+' 下载完成')
break
except:
print(u'%s文件,正在重试第%d次' % (str(j).zfill(3),l + 1))
picpath = r'C:\Users\bin\PycharmProjects\untitled\%s' % str(j).zfill(3) + '.ts'
file = open(picpath, 'wb')
for chunk in retu.iter_content(chunk_size=1024 * 8):
if chunk:
file.write(chunk)
file.flush()
file.close()

if __name__ == "__main__":
list = [i for i in range(0,2250)]  #2250是我爬的视频的长度
pool = Pool(4)
pool.map(download, list)
pool.close()
pool.join()

  lst = []
  for i in range(0,2250):   
     test = r'C:\Users\bin\PycharmProjects\untitled\abc\%s.ts' % str(i).zfill(3)
      if not os.path.exists(test):
  print(str(i).zfill(3)+'.ts')
  lst.append(i)
  print(lst)

  if len(lst):
 
   pool = Pool(4)
  
    pool.map(download, lst)
      pool.close()
  pool.join()

  else:
      print
      u'全部下载完成,正在合并'
  os.system(r'copy/b C:\Users\bin\PycharmProjects\untitled\*.ts C:\Users\bin\PycharmProjects\untitled\new.ts')
  print
  u'合并完成'

# Python中线程multiprocessing模块与进程使用的同一模块。使用方法也基本相同,唯一不同的是,from multiprocessing import Pool这样导入的Pool表示的是进程池;
# from multiprocessing.dummy import Pool这样导入的Pool表示的是线程池。这样就可以实现线程里面的并发了。
posted @ 2018-03-17 17:28  菜~~鸟  阅读(1704)  评论(1编辑  收藏  举报