1.bs4解析
import requests
from bs4 import BeautifulSoup
import datetime
if __name__=='__main__':
url = 'https://www.bilibili.com/v/popular/rank/all'
headers = {
//设置自己浏览器的请求头
}
page_text=requests.get(url=url,headers=headers).text
soup=BeautifulSoup(page_text,'lxml')
li_list=soup.select('.rank-list > li')
with open('bZhanRank_bs4.txt','w',encoding='utf-8') as fp:
fp.write('当前爬取热榜的时间为:'+str(datetime.datetime.now())+'\n\n')
for li in li_list:
#解析视频排行
li_rank=li.find('div',class_='num').string
li_rank='视频排行为:'+li_rank+','
#解析视频标题
li_title=li.find('div',class_='info').a.string.strip()
li_title='视频标题为:'+li_title+','
#解析视频播放量
li_viewCount=li.select('.detail>span')[0].text.strip()
li_viewCount='视频播放量为:'+li_viewCount+', '
#解析弹幕数量
li_danmuCount = li.select('.detail>span')[1].text.strip()
li_danmuCount='视频弹幕数量为:'+li_danmuCount+', '
#解析视频作者
li_upName=li.find('span',class_='data-box up-name').text.strip()
li_upName='视频up主:'+li_upName+', '
#解析综合评分
li_zongheScore=li.find('div',class_='pts').div.string
li_zongheScore='视频综合得分为:'+li_zongheScore
fp.write(li_rank+li_title+li_viewCount+li_danmuCount+li_upName+li_zongheScore+'\n')
爬取结果如下:
2.xpath解析
import requests
from lxml import etree
import datetime
if __name__ == "__main__":
#设置请求头
headers = {
//设置自己浏览器的请求头
}
#设置url
url = 'https://www.bilibili.com/v/popular/rank/all'
#爬取主页面的源码文件
page_text = requests.get(url=url,headers=headers).content.decode('utf-8')
#使用etree对象进行实例化
tree = etree.HTML(page_text)
#爬取各视频的标签所在位置
li_list = tree.xpath('//ul[@class="rank-list"]/li')
#对爬取到的内容进行存储
with open('./bZhanRank.txt', 'w', encoding='utf-8') as fp:
#记录爬取数据的时间
fp.write('时间:'+str(datetime.datetime.now())+'\n\n')
# 使用循环结构,提取各标签中的所需信息
for li in li_list:
#读取