# 爬取哔哩哔哩热门视频排行榜
import requests #python3.6 内置
from bs4 import BeautifulSoup #没有就安装:pip3 install beautifulsoup4
#爬取目标网址
url = 'https://www.bilibili.com/ranking?spm_id_from=333.851.b_7072696d61727950616765546162.3'
#获取目标html内容
data_html = requests.get(url).text
#BeautifulSoup可以将html内容解析处理 'html.parser' 告诉它是什么类型
soup = BeautifulSoup(data_html,'html.parser')
#获取所有的li
#find_all 找到所有的li标签,但是有些li比标签不是我们需要的,观察发现
#这些需要的li标签的class都是rank-item,所谓我们在后面加上条件
li_list = soup.findAll('li',{'class':'rank-item'})
#遍历li_list,
#text 显示文本内容
for i in li_list:
# 视频标题,因为每个的标题都是li标签下的a标签里,并且class="title"
title = i.find('a',{'class':"title"}).text
# 视频排名
top_num = i.find('div',{'class':"num"}).text
# 视频得分
rank = i.find('div',{'class':"pts"}).find('div').text
# 播放量,
#view_counts = i.find('div',{'class':"detail"}).find('span',{'class':'data-box'}).text
view_counts = i.find('span',{'class':'data-box'}).text #因为span标签的 class唯一,上句可以简写
#up主名
#up_name = i.find('div', {'class': "detail"}).find('a').find('span',{'class':"data-box"}).text
# up主名,上句可以这样:因为每一条li里有3个a,全部找出来取第3个内容
up_name = i.find_all('a')[2].text
#获取up的ID,利用get获取url,然后解析出id,利用字符串切片
up_id = i.find_all('a')[2].get('href')[len('//space.bilibili.com/'):]
#视频url
url = i.find('a',{'class':"title"}).get('href')
print('排名:%s,标题:%s,得分:%s,点播量:%s,up主:%s,up_id:%s,url:%s'%(top_num,title,rank,view_counts,up_name,up_id,url))

已经爬取到需要的字段,下篇实现保存功能
登陆后方可评论