这篇文章主要介绍怎么用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爬虫多线程快速获取视频”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!