美文网首页
2018-11-02视频爬取

2018-11-02视频爬取

作者: 捕风的逍遥侯 | 来源:发表于2018-11-02 10:02 被阅读0次

    # -*- coding:utf-8 -*- #

    import urllib.request

    import requests

    import re

    import os

    import time

    import logging

    from concurrent.futures import ThreadPoolExecutor

    #version 0.0.5

    #网站的规律是后面的编号是所有视频一起的,但是这些视频是分成不同的月份的。

    #比如2018-5/33839,2018-6/33840至2018-6/34732,2018-7/34733到后面有一个2015-10/4709

    month="2018-6"

    page_id_s = 34001 # 起始id 1600开始

    page_id_e = 34011 # 结束id  3620终止

    mpath = "VideoSave7"

    debug = True

    def init():

        #new a directory

        if(os.path.exists(mpath)):

            print("已存在'"+mpath+"',跳过!")

            logging.info("已存在'"+mpath+"',跳过!")

        else:

            os.makedirs(mpath, 0o755)

    def analyse():

        init()

        #inti threadpool

        pool = ThreadPoolExecutor(max_workers=3)  # 创建一个最大可容纳2个task的线程池

        i=1

        for page_id in range(page_id_s,page_id_e+1):

            #print(pool._work_queue.qsize())

            while(pool._work_queue.qsize()>0):

                #print("wait...")

                time.sleep(1)

            purl='http://www.m.com/video/2018-6/'+str(page_id)+'.html'

            if debug:

                print("%d.开始访问:"%(i)+purl+"\n")

            try:

                res = requests.get(purl)#requests得到url数据

                res.encoding = "gb2312"

                if (res.status_code == 200):  # response对象返回状态码,如果不是200,说明get失败!也就是没有得到有效信息

                    # print("访问正常!")

                    #mtitle = str(i) + "." + re.findall(r'<title>(.*?)</title>', res.text)[0].replace('在线观看', '')

                    try:

                        mtitle =str(i)+"."+ re.findall(r'<title>(.*?)</title>', res.text)[0]

                    except:

                        print('访问的网页已过时!请检查是否正常。')

                    mp4List = re.findall(r'https://(.*?)"', res.text)

                else:

                    print("网页访问异常!")

                for mp4url in mp4List:

                    mp4url = "https://" + mp4url

                    if debug:

                        #print("得到的mp4地址:"+str(mp4url)+"\n开始下载"+mtitle+"\n"+str(i)+".正在下载中...")

                        print("%s.准备下载:"%(str(i)) + mtitle + "\n")

                    else:

                        print("%s.访问成功,准备执行。\n"%(str(i) ))

                    with open('test.txt', 'w') as f:

                        f.writelines([purl, mpath])

                    mtitle = mtitle + month + "-" + str(page_id)

                    mpath_title = mpath + '/%s.mp4' % mtitle

                    futrue1 = pool.submit(download, mp4url, mpath_title, i)

                    i = i + 1

            except requests.exceptions.ConnectionError:

                print('1.爬取异常')

    def download(mp4url,mpath_title,i):

        try:

            print("%s.开始执行...\n"%(i))

            urllib.request.urlretrieve(mp4url,mpath_title)

            #time.sleep(4)

            print("%s.执行完成!\n"%(i))

        except:

            print("%s.执行异常!\n"%(i))

    if __name__ =='__main__':

        analyse()

    '''

    更新日志:

    0.0.4版本去掉,下载时候的文件名字提示

    0.0.5版本,修正全局变量的bug

            格式化输出

            增加调试模式与正常模式

    逻辑修改:因为访问网页与下载是不同线程,所以可以分开,把网页访问得到的信息放到队列中,然后再调用多线程执行即可。

    这样做可以提高效率

    '''

    相关文章

      网友评论

          本文标题:2018-11-02视频爬取

          本文链接:https://www.haomeiwen.com/subject/exsqxqtx.html