基于python的B站评论爬虫及抽奖项目


提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


来教大家写一个Bilibili抽奖用爬虫


前言

随着新型娱乐产业的快速发展,众多人为了为自己的视频吸引观众,通常会用华美的奖品吸引观众,但是观众通常因为对up主的不信任导致参与活动不够活跃,而且考虑到有时up主可能用各种技巧耍诈的情况发生,所以信任关系并不是那么的深刻。但是机器是不会骗人的!于是今天的项目应运而生,这是一个由python爬虫编写的抽奖系统。


这里用的是python语言

一、先设计对这个爬虫建立软件工程模型

本程序有三个步骤,我们使用的是无头爬虫,比较适合新手入门。将想要爬取的数据写入到xls文件中,所以本爬虫有三大步。第一:xls表格的读写操作。第二:网站数据的读取。第三:在写好的xls文件中抽取每个用户的id化作列表。

二、使用步骤

1.引入库

代码如下(示例):

import re
import numpy as np
import time
import xlrd
import xlwt
from xlutils.copy import copy
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import win32con
import win32api
import random

2.建立以及读写工作簿的函数

代码如下(示例):

def write_excel_xls(path, sheet_name, value):
    index = len(value)  # 获取需要写入数据的行数
    workbook = xlwt.Workbook()  # 新建一个工作簿
    sheet = workbook.add_sheet(sheet_name)  # 在工作簿中新建一个表格
    for i in range(0, index):
        for j in range(0, len(value[i])):
            sheet.write(i, j, value[i][j])  # 像表格中写入数据(对应的行和列)
    workbook.save(path)  # 保存工作簿

def write_excel_xls_append(path, value):
    index = len(value)  # 获取需要写入数据的行数
    workbook = xlrd.open_workbook(path)  # 打开工作簿
    sheets = workbook.sheet_names()  # 获取工作簿中的所有表格
    worksheet = workbook.sheet_by_name(sheets[0])  # 获取工作簿中所有表格中的的第一个表格
    rows_old = worksheet.nrows  # 获取表格中已存在的数据的行数
    new_workbook = copy(workbook)  # 将xlrd对象拷贝转化为xlwt对象
    new_worksheet = new_workbook.get_sheet(0)  # 获取转化后工作簿中的第一个表格
    for i in range(0, index):
        for j in range(0, len(value[i])):
            new_worksheet.write(i+rows_old, j, value[i][j])  # 追加写入数据,注意是从i+rows_old行开始写入
    new_workbook.save(path)  # 保存工作簿

def read_excel_xls(path):
    workbook = xlrd.open_workbook(path)  # 打开工作簿
    sheets = workbook.sheet_names()  # 获取工作簿中的所有表格
    worksheet = workbook.sheet_by_name(sheets[0])  # 获取工作簿中所有表格中的的第一个表格
    for i in range(0, worksheet.nrows):
        for j in range(0, worksheet.ncols):
            print(worksheet.cell_value(i, j), "\t", end="")  # 逐行逐列读取数据
        print()

3.读取网页数据

def spider(book_name_xls,sheet_name_xls,max_size):
    #这里是你的谷歌浏览器驱动的位置,如果报错chromdriver的问题肯定是这个地方的问题
    driver = webdriver.Chrome(r'C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe')
    driver.set_window_size(1400, 800)
    driver.get("https://www.bilibili.com/video/BV1v54y1e7ff?spm_id_from=333.851.b_7265706f7274466972737431.12")
    #B站特有的js加载代码,需要操纵鼠标进行爬取,这是首例
    time.sleep(3)
    win32api.mouse_event(win32con.MOUSEEVENTF_WHEEL,0,0,-1500)
    
    for i in range(60):
        time.sleep(1)
        print('进入等待时间,剩余时间为%s'%(60-i),end='\r',)
    value_title = [["rid", "评论人id", "评论内容"],]
    write_excel_xls(book_name_xls, sheet_name_xls, value_title)
    
    rid = 0
    #108824
    for i in range(max_size-1):
        p=1
        for p in range(21):
            try:
                rid = rid + 1
                #普通评论人内容
                comment_id=driver.find_elements_by_css_selector(f'div.comment-list > div.list-item.reply-wrap:nth-child({p})>div.con>div.user>a.name')[0].text
                
                comment_content = driver.find_elements_by_css_selector(f'div.comment-list > div.list-item.reply-wrap:nth-child({p})>div.con>p.text')[0].text
                    
                price_list.append(comment_id)
                p+=1

                print("正在爬取第%s"%rid)
                value1 = [[rid, comment_id,comment_content],]
                write_excel_xls_append(book_name_xls, value1)
            except:
                pass
        next_btn = driver.find_element_by_css_selector('div.comment-header div.header-page a.next')#使用css选择器选择下一页a标签
        next_btn.click()

抽奖函数

def choices():
    data = xlrd.open_workbook("F:/数据集散地/弹幕爬虫.xls")
    table = data.sheet_by_name('B站弹幕爬虫')
    content = table.col_values(1)
    for i in range(3):   #这里的3是抽取幸运用户个数,可以根据需求自己改动
        print(random.choice(content))

主函数

if __name__ == '__main__':
    book_name_xls = "F:/数据集散地/弹幕爬虫.xls" #填写你想存放excel的路径,没有文件会自动创建
    sheet_name_xls = 'B站弹幕爬虫' #sheet表名
    max_size = 10 #这里不要改,实际设置的是要搜寻数据的量
    spider(book_name_xls,sheet_name_xls,max_size)
    choices()

不多废话!

在这里插入图片描述
获取到数据的局部截图。

抽奖结果示例

在这里插入图片描述

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值