• 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("下载完成")
    

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

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

  • 相关阅读:
    右建删除.svn
    Oracle 初始化 SEQUENCE附代码
    IE8支付宝密码控件
    JavaScript怎样读取Gridview控件的单元格的值
    IIS7 发布WCF
    C#创建后台服务注意事项
    Sqlserver中传递列参数需要注意的一个小细节
    JavaScript中针对中文参数的转编码
    VS2010里面调试后台服务
    href=#与href=javascriptvoid(0)的区别
  • 原文地址:https://www.cnblogs.com/roccoshi/p/13027093.html
Copyright © 2020-2023  润新知