python读取数据视频_axaj异步加载数据爬虫,获取B站UP主所有视频信息保存到数据库——每周一个爬虫小教程系列...

这次要爬取的网页是B站里面的UP主的投稿视频页面,这次以教父的的账号来做个示范。

202008181515545087812.png

这篇文章的标题是ajax异步加载的数据爬取,这与平时的有什么区别呢?

通常的爬虫是将网页源码下载下来,然后利用Xpath或者其他一些方式,将有用的数据提取出来,但是如果下载之后没有看到任何数据呢?

就像这样子:

202008181519134476635.png

这个时候就说明这个网站可能是ajax异步加载的数据了,而不是后端直接渲染出来的。

就个人而言,是比较喜欢ajax的,因为这样的话就可以直接找到数据的接口了,提取数据直接用json当字典就可以解析出来了。

回到浏览器,在视频页面F12,进入Network,选择XHR(XMLHttpRequest),这时候我们点击第二页。

202008181522309371980.png

这时候我们就可以看到增加了几条东西。

202008181522548302057.png

一条一条点开看下,只要看Preview就可以了,因为如果是ajax渲染的话,请求返回来的肯定会有视频数据。

第一个就是了。

202008181523561265556.png

将data展开。可以看见有两个list,tlist和vlist,大概意思应该是投稿类型的列表和视频列表了吧

202008181524431130617.png

于是我们再展开vlist看看,这里面不仅有标题,还有描述,av号和bv号以及播放量和视频长度

202008181526047406826.png

这两条数据对应的也就是教父的第一个和第二个视频

202008181526396049581.png

这样子教父的接口就找到了,然后打开Python开始写代码。

在这里可以看到这次请求的URL和请求方式等,我们将其全部转移到python之中。

我们分析一下这个URL加了哪些参数mid:482165792 #这个对比可以发现是教父的ID,也就是说只要修改这个值就可以获取其他UP的视频信息了

ps:30 #根据实验,发现这个就是每页获取多少条视频数据了

tid:0 #好像不知道

pn:1 #page number?就是翻也吧

keyword: #关键词?

order:pubdate #排序方式,发布时间

jsonp:jsonp #返回json格式

202008181529339801503.png

不得不说,B站对于爬虫新手还是很友好的,没加任何反爬机制,直接请求就可以获取到数据

202008181531385039416.png

然后加个循环,获取一下所有页数的视频。

202008181536329883342.png

然后为了更清晰的展示,我们将数据清洗一下。# -*- coding: utf-8 -*-

"""

-------------------------------------------------

@ Author :Lan

@ blog :www.lanol.cn

@ Date : 2020/8/18

@ Description:I'm in charge of my Code

-------------------------------------------------

"""

import requests

for i in range(1, 12):

url = f'https://API.bilibili.com/x/space/arc/search?mid=482165792&ps=30&tid=0&pn={i}&keyword=&order=pubdate&jsonp=jsonp'

res = requests.get(url).json()['data']['list']['vlist']

for j in res:

print('视频标题', j['title'], 'AV号', j['aid'], '播放量', j['play'], '视频时长', j['length'])

202008181540018735125.png

然后我们建立一个表格,将其保存下来。# -*- coding: utf-8 -*-

"""

-------------------------------------------------

@ Author :Lan

@ Blog :www.lanol.cn

@ Date : 2020/8/18

@ Description:I'm in charge of my Code

-------------------------------------------------

"""

import requests

with open('JiaoFuMvInfo.csv', 'a+', encoding='utf8') as f:

f.write('视频标题,AV号,BV号,播放量,视频时长,视频简介,视频链接\n')

for i in range(1, 12):

url = f'https://api.bilibili.com/x/space/arc/search?mid=482165792&ps=30&tid=0&pn={i}&keyword=&order=pubdate&jsonp=jsonp'

res = requests.get(url).json()['data']['list']['vlist']

for j in res:

title = j['title'].replace(',', ',')

avId = j['aid']

bvId = j['bvid']

play = j['play']

length = j['length']

des = j['description'].replace(',', ',').replace('\n', '')

url = f'https://www.bilibili.com/video/{j["bvid"]}'

f.write(f"{title},{avId},{bvId},{play},{length},{des},{url}\n")

print('视频标题', j['title'], 'AV号', j['aid'], '播放量', j['play'], '视频时长', j['length'])

202008181554562123530.png

还可以结合我博客以前的教程,将这些数据做一些词云图等,还可以去获取一些喜欢的UP主的视频

然后我顺便写了个获取所有B站用户的信息,为了和谐就只是单纯的循环了

202008181623225707806.png

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值