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

  介绍

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

先看请求的URL https://api.bilibili.com/medialist/gateway/base/spaceDetail?media_id=88854277&

; pn=1, ps=20,关键字=和=mtime&顺序类型=0,tid=0, jsonp=jsonp

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

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

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

小姐:=1   while  1,:   ,,,url =, & # 39; https://api.bilibili.com/medialist/gateway/base/spaceDetail?media_id=88854277& pn=& # 39; +, str (i), + & # 39;和ps=20,关键字=?=mtime&类型=0,tid=0, jsonp=jsonp # 39;   ,,,html =, requests.get (url)   ,,,小姐:=,小姐:+ 1   打印(html.text)

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

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

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

res(& # 39;数据# 39;][& # 39;媒体# 39;]

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

res =, json.loads (html.text)   len_video =, len (res[& # 39;数据# 39;][& # 39;媒体# 39;])   for  id 拷贝范围(0,len_video):   create_thread (res[& # 39;数据# 39;][& # 39;媒体# 39;][id])

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

def  create_thread (res):   ,,,thread =, myThread (res (& # 39; id # 39;], res(& # 39;标题# 39;],res (& # 39; id # 39;])   thread.start ()

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

class  myThread (threading.Thread):,, #,继承父类threading.Thread   ,,,def  __init__(自我,,threadID,,名字,,计数器):   ,,,,,,,threading.Thread.__init__(自我)   ,,,,,,,self.threadID =threadID   ,,,,,,,self.name =,名字   ,,,,,,,self.counter =,计数器   ,,,def 运行(自我):   ,,,,,,,download_video (self.threadID)

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

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

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

下载完成后:

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

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

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