zoukankan      html  css  js  c++  java
  • 2019-02-09 python爬取mooc视频项目初级简单版

    今天花了一下午时间来做这东西,之前没有自己写过代码,50几行的代码还是查了很多东西啊,果然学起来和自己动起手来完全是两码事。

    方案:requests库+正则表达式提取视频下载链接+urlretrieve下载到本地

    import requests
    from urllib.request import urlretrieve
    import re
    
    def geturl(url):
        requ = requests.get(url,headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36'})
        req = requ.text
        regexname = re.compile(r'_shd.mp4?(.*?)</a>')
        regexgetname=re.compile(r'cb550>(.*)')
        regexmp4 = re.compile(r'href=(.*_shd?.mp4)')
        prename = regexname.findall(req)
        name=[]
        list=[]
        for i in prename:
            name += regexgetname.findall(i)
        load = regexmp4.findall(req)
        for i in range(len(name)):
            list +=(name[i],load[i])
        print(list)
        return list
    
    
    def download(list):
        filename= r'C:Users47461DesktopDownloadVedio\'
        for i in range(0,len(list),2):
            name=list[i]
            url=list[i+1]
            local = filename+name+'.mp4'
            try:
                print("""+name+"""+"已经开始下载")
                urlretrieve(url,local,reporthook=callback)
                print("""+name+"""+"已经下载完成")
            except:
                pass
    
    
    def callback(count,blockSize,totalSize):  #下载进度回调函数,count表示已下载的个数,blocksize为已经下载的大小,totalsize为总大小
        if not count:
            print("开始下载")
        if totalSize<0:
            print("要下载的文件大小为0")
        else:
            per = 100*count*blockSize/totalSize
            if per>100:
                per=100
            print("-----当前已下载:"+'%.2f%%' % per + "-----")
            if per==100:
                return True
    
    list = geturl(r'http://www.feemic.cn/mooc/icourse163/1002161029?type=hot')
    if list:
        print("开始下载")
        download(list)
        print("下载完成")
    

    主要正则表达式不是特别熟练花了点时间

    之后可以改成多线程?反正还可以从很多地方改进啊。

  • 相关阅读:
    艾伟:WinForm控件开发总结(三)认识WinForm控件常用的Attribute 狼人:
    break while(1)
    从“不太差”到“卓越”
    分享一种需求评审的方案
    高德地图 android api 实现自动定位
    Java Class Loader解析
    JAVA IO 设计模式彻底分析
    [latex]PGF 和 tikz中如何旋转图形的示例
    算法笔记之 并查集入门 POJ 1611
    Vector 和 ArrayList 哪一个更好? 为什么?
  • 原文地址:https://www.cnblogs.com/roccoshi/p/13027093.html
Copyright © 2011-2022 走看看