python爬虫bilibili网站代码_python爬虫代码-爬取bilibili-live开播房间信息

该博客展示了如何使用Python爬虫从bilibili网站抓取所有开播房间的信息,包括主播名、房间名和人气值。通过使用requests、BeautifulSoup、selenium等库,爬虫首先获取动态页面,然后解析HTML获取直播信息,并将数据存储到本地的xlsx文件中。
摘要由CSDN通过智能技术生成

# -*- encoding:utf-8 -*-

# 作者:大帅

# 目标:获取bilibili直播所有开播房间信息并保存在本地

import requests,bs4,re,time

import xlwings as xw

from selenium import webdriver

from bs4 import BeautifulSoup

roomlist = []

# 获取bilibili动态页面

def gethtml(url):

#n = 0

try:

driver = webdriver.Chrome()

driver.get(url)

button_view = driver.find_element_by_xpath('//*[@id="room-list-section"]/div[1]/div/div[1]/div[2]')

button_view.click()

while True:

try:

button = driver.find_element_by_xpath('//*[@id="room-list-section"]/div[2]/div[1]/span[1]')

time.sleep(1)

#n += 1

button.click()

except:

break

html = driver.page_source

file_html = open(r'f:\workspace\example\livehtml.txt','w+',encoding='utf-8')

file_html.write(html)

file_html.close()

driver.quit()

return html

except:

print('执行异常')

# 获取room详情并储存在一个2维列表里

def getroomlist(html):

soup = BeautifulSoup(html,"html.parser")

for li in soup.find('section',id = 'room-list-section').ul:

# 获取房间的主播名和房间名

pre_rt = r'title=".*"'

pattern1 =re.compile(pre_rt)

rt_match =re.findall(pattern1,str(li))

try:

if len(rt_match) == 0:

continue

else:

room_title = rt_match[0].split('"')[1]

anchor_name = rt_match[1].split('"')[1]

# 获取房间的人气值

pre_view = r'>\d+

pattern2 = re.compile(pre_view)

vc_match = pattern2.search(str(li))

if vc_match == None:

continue

else:

pre_vc_value = vc_match.group(0)

vc_value = re.sub(r'>|

roomlist.append([anchor_name,room_title,vc_value])

except:

print(anchor_name)

break

return roomlist

# 将房间信息保存在xlsx文件里方便后期处理和存储

def savelivelist(livelist):

app = xw.App(visible=True,add_book=False)

app.display_alerts = False

app.screen_updating = False

wb = app.books.open(r'f:\workspace\example\live.xlsx')

sheet1 = wb.sheets['sheet1']

sheet1.range('A1').value = ['主播名','房间名','人气值']

sheet1.range('A2').value = livelist

wb.save()

wb.close()

app.quit()

print ('完成存储')

# 主函数

def main():

url = 'http://live.bilibili.com/all'

html = gethtml(url)

livelist = getroomlist(html)

#print(len(livelist))

savelivelist(livelist)

main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值