获取网址和Header

进入b站, 可以轻松找到b站在线列表的网址为 https://www.bilibili.com/video/online.html?spm_id_from=333.334.b_686f6d655f706f70756c6172697a65.6

进入该网站, 按F12可以打开开发人员工具, 进入 Network 栏, 再刷新该网页, 即可轻松找到Headers:

01

我们使用其中几个关键的Header创建headers:

1
2
3
4
5
6
7
headers = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
"Connection": "keep-alive",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
}

分析源代码

打开该网页的源代码, 我们可以看到以下代码:

1
2
3
4
5
6
7
8
......
/span><span class="b-head-t">在线列表</span></div><div class="online-list"><div class="ebox"><a href="/video/av50728878/" title="沙雕至极!这动画承包了我今年全部的笑点!" target="_blank"><div class="lazy-img"><img alt="沙雕至极!这动画承包了我今年全部的笑点!" src=""></div><p class="etitle">沙雕至极!这动画承包了我今年全部的笑点!</p></a><div class="dlo"><span class="play"><i class="b-icon b-icon-v-play"></i>110.4万
</span><span class="dm"><i class="b-icon b-icon-v-dm"></i>1.6万
</span><a href="//space.bilibili.com/777536/" target="blank" class="author">LexBurner</a></div><p class="ol"><b>20137</b>在线
</p><div class="watch-later-trigger w-later"></div></div><div class="ebox"><a href="/video/av50956170/" title="张召忠说149:摔飞机,烧航母,印度的装备是纸糊的吗?" target="_blank"><div class="lazy-img"><img alt="张召忠说149:摔飞机,烧航母,印度的装备是纸糊的吗?" src=""></div><p class="etitle">张召忠说149:摔飞机,烧航母,印度的装备是纸糊的吗?</p></a><div class="dlo"><span class="play"><i class="b-icon b-icon-v-play"></i>3.5万
</span><span class="dm"><i class="b-icon b-icon-v-dm"></i>3971
</span><a href="//space.bilibili.com/33683045/" target="blank" class="author">张召忠</a></div><p class="ol"><b>15418</b>在线
......

分析这段代码, 我们不难看出, 视频的名称都储存在tag ‘p’ 的 class=”etitle” 中, 视频的作者名 储存在 tag ‘a’ 的 class=”author” 中, 视频的当前在线人数储存在tag ‘b’ 中.
这样, 我们就不难写出以下代码:

1
2
3
tag_title = soup.find_all('p', class_='etitle')
tag_author = soup.find_all('a', class_='author')
tag_online = soup.find_all('b')

完整代码

到这时我们就可以写出自己的完整代码了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import requests
from bs4 import BeautifulSoup
headers = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
"Connection": "keep-alive",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
}
url = 'https://www.bilibili.com/video/online.html?spm_id_from=333.334.b_686f6d655f706f70756c6172697a65.6'
r = requests.request('GET', url, headers=headers)
soup = BeautifulSoup(r.text)
tag_title = soup.find_all('p', class_='etitle')
tag_author = soup.find_all('a', class_='author')
tag_online = soup.find_all('b')
infoList = []
for i in range(len(tag_title)):
infoList.append(
[tag_title[i].string, tag_author[i].string, tag_online[i].string])

tplt = "{:<20}\t{:<8}\t{:^6}"
print(tplt.format("标题", "作者", "在线人数"))
for i in infoList:
print(tplt.format(i[0], i[1], i[2]))

输出的结果为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
标题                    作者             在线人数
沙雕至极!这动画承包了我今年全部的笑点! LexBurner 18958
张召忠说149:摔飞机,烧航母,印度的装备是纸糊的吗? 张召忠 13273
【RunningMan全集】2010-2019超清大合集(更新至E449.190428,记得看简介或置顶评论哦,持续上传更新中) 鲸鱼要好好学习呀 13063
《复联4》有12个严重BUG?含剧透! 努力的Lorre 12729
徐老师讲故事100(上):英雄联盟宇宙史——上古神话时代 靠脸吃饭的徐大王 11989
决胜荒野 First Man Out 05 哈萨克斯坦荒地 哔哩哔哩纪录片 9857
决胜荒野 First Man Out 04 蒙古荒漠 哔哩哔哩纪录片 9419
这可能是我见过最可爱的套刷了!近期我脸蛋子上用了些啥!【nya酱】 nya酱的一生 7914
试吃1500元帝王蟹和300元雪蟹,看看哪种更值得购买! 大祥哥来了 7787
决胜荒野 First Man Out 06 喜马拉雅山脉 哔哩哔哩纪录片 7763
【合集】我的英雄学院 第二季 哔哩哔哩番剧 7517
1200元一晚上的总统套房,竟然为了几块钱... 力元君 7257
【党妹】LolitaFashion|128块就能买到神仙lo裙?7条白菜Lo裙开箱测评,下水道女孩也要一样可可爱爱! 机智的党妹 7083
王老菊教你大禹(ju)治水 怕上火暴王老菊 7038
【嘻咦啊看】他88岁还在自导自演拍电影 嘻咦啊看 6985
【主播真会玩主机篇】73:PDD遭纸人带刀恐吓,挨打王寅子咸鱼翻身 起小点是大腿 6865
决胜荒野 First Man Out 01 泰国丛林 哔哩哔哩纪录片 6842
【复联4】沙雕妇联的欢乐日常 第二期 谷诺哈纳 6741
up第一次在山里打工养蜂,没想到被蜂农胖喂了一顿 盗月社食遇记 6717
【敖厂长】难度超变态的沙雕游戏 敖厂长 6698

到这里我们一个简单爬虫就完成了, 不过要是正式的爬虫的话还有很多地方需要完善, 这里就不多赘述了.