温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么用python爬虫多线程快速获取视频

发布时间:2020-12-01 09:13:54 来源:亿速云 阅读:168 作者:小新 栏目:编程语言

这篇文章主要介绍怎么用python爬虫多线程快速获取视频,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

先看请求的URL

https://api.bilibili.com/medialist/gateway/base/spaceDetail?media_id=88854277&pn=1&ps=20&keyword=&order=mtime&type=0&tid=0&jsonp=jsonp

media_id是收藏夹的id号,pn是代表哪一分页,ps是当前分页中视频数量。

那么我们就可以调用这个api来拿到所有收藏的视频了。

我们的视频分页当然不可能只有一页,所以我们可以遍历pn递增。

i = 1
while 1 :
    url = 'https://api.bilibili.com/medialist/gateway/base/spaceDetail?media_id=88854277&pn='+ str(i) +'&ps=20&keyword=ℴ=mtime&type=0&tid=0&jsonp=jsonp'
    html = requests.get(url)
    i = i + 1
print(html.text)

这样就能拿到一个收藏夹下所有视频了,当i超过收藏夹页数时,直接异常退出即可。

接下来我们需要解析出每一个视频的id。

根据json解析,我们很容易就能用

res['data']['medias']

来获得所有的视频,然后再根据下标解析出每一个视频。

res = json.loads(html.text)
len_video = len(res['data']['medias'])
for id in range(0,len_video):
create_thread(res['data']['medias'][id])

这样我们就可以获取当前页视频数量,然后创建线程进行下载了,因为下载是一个非常占IO的事情,如果你单线程执行,下载一个视频再下载另一个,这样会很慢,我们可以给每一个视频创建一个线程来提高速度。

def create_thread(res):
    thread = myThread(res['id'],res['title'],res['id'])
thread.start()

创建线程的线程号是视频的id号,线程名是视频名。

class myThread(threading.Thread):  # 继承父类threading.Thread
    def __init__(self, threadID, name, counter):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name
        self.counter = counter
    def run(self):
        download_video(self.threadID)

线程类如上,里面有两个函数,__init__是默认的线程初始化函数,里面就是我们创建线程时传入的id和name。第二个函数是线程执行时的run方法,也就是我们定义线程的具体要做的事,里面只有一个download_video方法。

# 下载视频
def download_video(av_id):
os.system('you-get -o d:/vedio/ https://www.bilibili.com/video/av'+str(av_id))

在下载函数中,我们可以调用you-get来帮助我们解析下载视频(不要问为什么调you-get,自己解析太麻烦了)。

下载完成后:

怎么用python爬虫多线程快速获取视频

以上是“怎么用python爬虫多线程快速获取视频”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI