long blogs

进一步有进一步惊喜


  • Home
  • Archive
  • Tags
  •  

© 2025 long

Theme Typography by Makito

Proudly published with Hexo

爬取B站的视频链接

Posted at 2019-04-22 笔记 爬虫 

爬取目的

为了下载b站的教学视频url地址,便于使用唧唧来下载视频

爬取的信息

视频的URL,视频的title,视频的时长length

存储的格式

关键步骤

由于使用异步加载的方式加载页面,所以不能用传统的方式来爬取

1、获得所需的数据接口


通过更改page的值便可以获得下一个页面的视频数据
返回的数据是json数据

vlist数据和pages数据是自己需要的数据
vlist数据格式

从vlist数据中提取出
aid 视频的av号
title 视频的标题
length 视频的长度

Python代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58

# encoding=utf-8
# coding=utf-8

import json
import csv
import requests
import time
import random

header = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/71.0.3578.98 Safari/537.36'
}

# 读取文件
midf = open('mid.txt','r',encoding='utf-8')
mid = midf.readline()

# 生成初始化的请求url
page1 = "https://space.bilibili.com/ajax/member/getSubmitVideos?mid="+str(mid)+\
"&pagesize=30&tid=0&page=1&keyword=&order=pubdate"

# 写入文件
csvf = open('data.csv','w+',encoding='utf-8')
csvwriter = csv.writer(csvf)
csvwriter.writerow(('URL','title','length'))


# 写入数据函数
def saveData(jsondata):
for item in jsondata:
url = "https://www.bilibili.com/video/av"+str(item['aid'])
title = item['title']
length = item['length']
csvwriter.writerow((url,title,length))

# 获得数据函数
def getTextData(url):
res = requests.get(url,headers=header)
return res.text

def start():
jsondata = getTextData(page1)
s = json.loads(jsondata)
pages = s['data']['pages']
for page in range(1,pages):
geturl = "https://space.bilibili.com/ajax/member/getSubmitVideos?mid="+str(mid)+\
"&pagesize=30&tid=0&page="+\
str(page)+"&keyword=&order=pubdate"
jsondata = getTextData(geturl)
s1 = json.loads(jsondata)
saveData(s1['data']['vlist'])
time.sleep(2+random.random())

# 开始爬取
start()

爬取结果

Share 

 Previous post: vue笔记 Next post: 关于htmlcss的笔记 

© 2025 long

Theme Typography by Makito

Proudly published with Hexo