Python3 (爬虫实践)[BeautifulSoup + Selenium] 爬取B站用户名和评论,并且按照条件进行抽奖


一、前言

这是我写的第一篇爬虫博客(所以写了挺多)。试了一下午,也就写成这样了。兄弟们能提出建议就非常好了,以后就按差不多的框架写(就是最近没啥时间写了)。

某赛尔号UP主出了个抽奖视频,我进去看了下,他说他每几个星期就会组织一次抽奖(评论太多,单单筛选就得半年,非常浪费时间),所以我作为群管理员(不干事的便宜管理),觉得应该帮UP抽奖,才对得起他。
抽奖规则就一个:评论区回复关键字


二、总思路

就这还思路,玩呢?

1.爬取需要的内容

爬取B站某视频下评论区的用户和评论

页面地址为:链接: https://www.bilibili.com/

爬取的评论:在这里插入图片描述


2.整理数据并进行抽奖

会用到Pandas和Random库

学习链接: https://www.pypandas.cn/


三、爬虫

1. 选择库

爬虫的库有很多,想好自己要使用什么库来写是很重要的。考虑的因素有很多,比如运行速度,代码难度(静态网页,动态网页,反爬机制等)。我思考的就很简单,哪种简单写那个。因为我是初学,所以我抛开了运行速度,用了写起来比较简单的Selenium库


2. 引用库

import time # 做间隔
import csv # 存储数据
from selenium import webdriver
from bs4 import BeautifulSoup
import emoji # 去除恶心的表情
import re # 去除奇怪的字符和表情

3. 设置Selenium参数

# 设置浏览器后台执行
options=webdriver.ChromeOptions()
options.add_argument('headless') # 无头模式:设置浏览器后台运行(无界面状态)
#禁止图片和css的加载,来保证运行速度
prefs = {
   "profile.managed_default_content_settings.images": 2,'permissions.default.stylesheet':2}
options.add_experimental_option("prefs", prefs)
driver=webdriver.Chrome(options=options) # 创建Chrome浏览器对象。打开浏览器窗口

4.爬取数据:

先打开网页:

url = 'https://www.bilibili.com/video/BV1P5411a7NF' # 打开网页
driver.get(url)
driver.maximize_window()# 窗口最大化
time.sleep(2) # 停止2秒加载网页

运行后,把代码一层一层剥开,发现并不能找到评论区代码(没有箭头)

在这里插入图片描述

需要下拉滚动条到评论区,以获取评论区的代码,一次即可(翻页后自动到评论区)

js = "window.scrollTo(0,1000)"
driver.execute_script(js)  # 执行js命令
time.sleep(2)

再次运行,发现多了些小箭头,这样源代码就加载出来了

在这里插入图片描述


目前为止的代码(自己跟着试试):

import time
import csv
from selenium import webdriver
from bs4 import BeautifulSoup
import emoji
import re

options = webdriver.ChromeOptions()
options.add_argument('headless')
prefs = {
   "profile.managed_default_content_settings.images": 2,'permissions.default.stylesheet':2}
options.add_experimental_option("prefs", prefs)
driver=webdriver.Chrome(options=options) # 创建Chrome浏览器对象。打开浏览器窗口

url = 'https://www.bilibili.com/video/BV1P5411a7NF' # 打开网页
driver.get(url)
driver.maximize_window()# 窗口最大化
time.sleep(2) # 停止2秒加载网页(时间按照网速和电脑运行速度决定)
js = "window.scrollTo(0,1000)"
driver.execute_script(js)  # 执行js命令
time.sleep(1)

在这里插入图片描述
要爬的东西只有用户名和评论,一层层剥开分析


用户名

a标签,class=name

users = soup.find('div', class_='con').find_all_next('a', class_='name')

评论
p标签,class=text

comments = soup.find('div', class_=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值