网页视频抓取脚本(抓取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中的标签,将今天的热门改为每周热门,以及本月的热门。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线