之前在商拆营的时候,分享了一个微博一个B站的excle数据,大家都比较好奇 怎么快速的抓取这些数据,我这边做个如何写尽量少的代码快速抓取这些数据,图文教程。
我们先访问需要访问的用户主页
因为我这边想抓取全部的视频列表,所以我这边直接选取更多,获取全部视频的列表
我们打开F12找到https://api.bilibili.com/x/space/arc/search的请求
可以看到里面的数据预览 包含了一整页的视频
我们右键复制这个请求的cUrl
进入转换网站https://curlconverter.com/
粘贴进左边的框 选择自己适合的语言 我这边选择Python
我们把右边框的代码复制进入Python编辑器
在底部新增
print(response.json())
可以看到数据已经被获取到了
接下来就是根据返回的json结构来解析数据并保存了
data = response.json().get('data').get('list').get('vlist')
for i in data:
row = {}
row['标题'] = i.get('title')
row['评论'] = i.get('comment')
row['阅读量'] = i.get('play')
row['发布时间'] = time.strftime("%Y-%m-%d", time.localtime(i.get('created')))
print(row)
想要的数据已经被爬取并打印
我们这里只查询了一页的数据 所以我这边尝试把每页数量改大 看是否可以一次就获取所有数据
Key: 'SearchArg.Ps' Error:Field validation for 'Ps' failed on the 'lte' tag
返回报错可以看到后台对每页数量做了限制,经我测试B站这个接口的最大数量是每页50
我们可以在返回的数据或者界面上看到总视频是446个 也就是说我们9次请求就可以获取完
def get_bilipage(page):
params = (
('mid', '99157282'),
('ps', '50'),
('tid', '0'),
('pn', str(page)),
('keyword', ''),
('order', 'pubdate'),
('jsonp', 'jsonp'),
)
response = requests.get('https://api.bilibili.com/x/space/arc/search', headers=headers, params=params)
data = response.json().get('data').get('list').get('vlist')
reslut=[]
for i in data:
row = {}
row['标题'] = i.get('title')
row['评论'] = i.get('comment')
row['阅读量'] = i.get('play')
row['发布时间'] = time.strftime("%Y-%m-%d", time.localtime(i.get('created')))
print(row)
reslut.append(row)
return reslut
res=[]
for i in range(1,10):
res+=get_bilipage(i)
write_excle(res)
在路径下看到excle
由此B站爬取模板就出来了 。
考虑到部分同学没有Python环境 这边做了一个小工具 下载
可以直接 使用mid就是用户主页上的数字
本站文章除注明转载/出处外,均为本站原创,转载前请务必署名,转载请标明出处 最后编辑时间为: 2021/12/13 18:38:47