网页视频抓取脚本(抓取B站每日的小视频排行榜完整的分析过程)
优采云 发布时间: 2021-10-14 14:23网页视频抓取脚本(抓取B站每日的小视频排行榜完整的分析过程)
抓取B站每日小视频排名,本周和本月用同样的方法。
网址:
工具:python3、谷歌浏览器、pycharm
模块:请求、时间、随机
网页:
打开开发者工具并按 F12。刷新网页并抓取数据。我们将抓取红色部分的数据。
点击这条数据,先看标题。
再看参数信息
显然,请求的 URL 是由基本 URL 和参数拼接而成。
我们点击预览,查看,发现是一个json数据,与我们抓取的视频一一对应。您可以轻松获取文章 标题并下载数据。
我们很容易知道视频网站是动态加载的。继续往下滑,看看还有没有这样的json数据,如果有,请求URL的参数做了哪些改变。
果然还有这样的数据,我们再来看看head参数。
继续向下滚动视频,
我又找数据,观察参数变化,发现只有next_offset字段在变化,每次都比上一次多10个。这个很简单,把变量next_offset写成变量,返回目标网页的json数据。
这就是完整的分析过程。完整代码如下:
完整代码:
import requests
import time
import random
#获取网页原数据
def get_json(url):
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'}
params={
'page_size':'10',
'next_offset':str(num),
'tag':'今日热门',
'platform':'pc',
}
try:
html=requests.get(url,headers=headers,params=params)
return html.json()
except:
print("请求错误")
pass
#下载视频
def downloader(url,path):
start=time.time()#开始时间
size=0
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'}
response=requests.get(url,headers,stream=True)#stream属性必须带上
chunk_size=1024#每次下载的数据大小
content_size=int(response.headers['content-length'])#总大小
if response.status_code==200:
print('[文件大小]:%0.2fMB'%(content_size/chunk_size/1024))#换算单位
with open(path,'wb')as f:
for data in response.iter_content(chunk_size=chunk_size):
f.write(data)
size+=len(data)
if __name__ == '__main__':
for i in range(10):
url='http://api.vc.bilibili.com/board/v1/ranking/top?'
num=i*10+1
html=get_json(url)
infos=html['data']['items']
for info in infos:
title=info['item']['description']#小视频的标题
video_url=info['item']['video_playurl']#视频地址
print(title,video_url)
#为了防止视频没有video_url
try:
downloader(video_url,path="%s.mp4"%title)
print("成功下载一个")
except BaseException:
print("下载失败")
pass
time.sleep(int(format(random.randint(2,8))))#设置随机等待时间
如果你想抓取每周或每月的视频,你只需要改变参数params中的标签,将今天的热门改为每周热门,以及本月的热门。