百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

python爬取B站网页弹幕内容,并将爬取内容以五角星的形式显示出来

bigegpt 2024-09-10 11:16 49 浏览

思路:

  • 向哔哩哔哩网站发送请求
  • 请求成功后,解析爬取的弹幕内容保存到一个文件中
  • 读取文件并分析弹幕内容中词组或文字出现的频率
  • 将这些词组或文字组成五角星图形
  • 组成五角星图形后,以图片的形式输出

使用到的类库,如果没有,需要下载,下载命令:

pip install requests
pip install bs4
pip install pandas
pip install lxml # 在解析xml文件时,需要使用
pip install jieba
pip install wordcloud
pip install imageio
pip install matplotlib

实现:

import requests
from bs4 import BeautifulSoup
import pandas as pd
import re
import jieba
from wordcloud import WordCloud
from imageio import imread
import matplotlib.pyplot as plt
?
'''
python学习交流群:821460695更多学习资料可以加群获取
'''
# 网页地址,该地址只针对哔哩哔哩弹幕网有效,获取方式查看
url = "http://comment.bilibili.com/124001121.xml"
?
# 网站访问的用户代理,建议携带,不携带可能无法访问
header = {
 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"
}
?
# 向对方服务器发送请求,返回访问状态,
# 返回状态如果是以[2]开头,表示访问成功,[4]开头表示网页不存在,[5]开头网站内部错误
# 访问状态无法直接读取,需通过属性[text]获取
response = requests.get(url,header)
?
# 获取网页的编码规则,建议通过该方式获取,而不是直接赋值,可能存在设置不对的情况,可能不是中文网页
# response.encoding = "utf-8"
response.encoding = response.apparent_encoding
# print(response.text)
?
# 获取网页文本内容
data = response.text
'''
--将获取到的弹幕内容处理后存放在txt文件中,并读取出来
--网页获取的弹幕内容是带html标签的,需要将标签和非汉字的内容清除
'''
# 解析文本xml,处理不规范标记并生成剖析树
soup = BeautifulSoup(data,'lxml') 
# print(soup)
# 获取所有<d>标签中的内容,此时是带标签的文本内容
d_list = soup.find_all('d')
?
# 去掉<d>标签,将文本内容存在在列表dlst
dlst = []
for d in d_list:
 danmu = {}
 danmu['弹幕'] = d.text # 循环获取所有<d>标签中内容
 dlst.append(danmu)
?
df = pd.DataFrame(dlst) # 将列表dlst中的内容存放在数据集中,类似于Excel表格
# print(df)
?
# 创建并打开一个文件
f = open('cl.txt','w',encoding='utf-8')
# 进行文本过滤
for i in df['弹幕'].values: # 遍历数据集中的所有的弹幕内容
 pat = re.compile(r'[一-龥+]') # 定义过滤规则,只保留中文汉字,该正则表达式几乎包含了所有汉字龥(yu,第四声)
 filter_data = re.findall(pattern=pat,string=i) # 执行过滤操作
 f.write(''.join(filter_data)) # 将过滤后的弹幕内容写入创建的[cl.txt]文件中
f.close()
?
'''
--读取弹幕内容所在的文件[cl.txt]
'''
f1 = open('cl.txt','r',encoding='utf-8')
data = f1.read()
?
'''
--将弹幕内容分割成词组,并组合成五角星的图案
'''
result = " ".join(jieba.lcut(data))
?
f1.close()
color_mask = imread("五角星.jpg") # 设置数据组合的图形,最好使用空心的图片
wc = WordCloud(
 font_path="C:\Windows\Fonts\simsun.ttc", # 数据显示的字体
 width=1000,
 height=800,
 background_color='white', # 词云的背景色
 mask=color_mask # 词云组成的图形,默认为二维
)
?
wc.generate(result) # 将弹幕内容生成词云
wc.to_file('clanned.png') # 词云输出文件
?
'''
--显示弹幕内容组成的图片
'''
plt.imshow(wc)
plt.show()

知识点:

  • request 向对方服务器发送请求
  • BeautifulSoup 解析爬取的弹幕内容
  • pandas 分析弹幕数据
  • jieba 中文分词器,或称为中文词组切片器
  • wordcloud 加载弹幕文本,并输出文件(这里使用图片的方式输出)
  • matplotlib.pyplot 将整理后的弹幕文本以图形的方式输出(这里是以五角星的图片为例)
  • imread 读取图片

问题:

  • 爬取的弹幕内容被保存在了文件后,后又重新读取,是否可以不存放在文件中,直接使用列表或者其他对象存储,然后再读取?保存在文件和直接读取的优缺点是什么?
  • 弹幕内容中除了汉字,实际上还包含了大量的字母,表情符号,这些内容可以通过什么正则表达式进行筛选,能否同时跟汉字一起筛选出来?
  • 在导包的时候,使用[from scipy.misc import imread]报错,用[from imageio import imread]代替即可。为什么使用scipy.misc中的imread报错?

相关推荐

Go语言泛型-泛型约束与实践(go1.7泛型)

来源:械说在Go语言中,Go泛型-泛型约束与实践部分主要探讨如何定义和使用泛型约束(Constraints),以及如何在实际开发中利用泛型进行更灵活的编程。以下是详细内容:一、什么是泛型约束?**泛型...

golang总结(golang实战教程)

基础部分Go语言有哪些优势?1简单易学:语法简洁,减少了代码的冗余。高效并发:内置强大的goroutine和channel,使并发编程更加高效且易于管理。内存管理:拥有自动垃圾回收机制,减少内...

Go 官宣:新版 Protobuf API(go pro版本)

原文作者:JoeTsai,DamienNeil和HerbieOng原文链接:https://blog.golang.org/a-new-go-api-for-protocol-buffer...

Golang开发的一些注意事项(一)(golang入门项目)

1.channel关闭后读的问题当channel关闭之后再去读取它,虽然不会引发panic,但会直接得到零值,而且ok的值为false。packagemainimport"...

golang 托盘菜单应用及打开系统默认浏览器

之前看到一个应用,用go语言编写,说是某某程序的windows图形化客户端,体验一下发现只是一个托盘,然后托盘菜单的控制面板功能直接打开本地浏览器访问程序启动的webserver网页完成gui相关功...

golang标准库每日一库之 io/ioutil

一、核心函数概览函数作用描述替代方案(Go1.16+)ioutil.ReadFile(filename)一次性读取整个文件内容(返回[]byte)os.ReadFileioutil.WriteFi...

文件类型更改器——GoLang 中的 CLI 工具

我是如何为一项琐碎的工作任务创建一个简单的工具的,你也可以上周我开始玩GoLang,它是一种由Google制作的类C编译语言,非常轻量和快速,事实上它经常在Techempower的基准测...

Go (Golang) 中的 Channels 简介(golang channel长度和容量)

这篇文章重点介绍Channels(通道)在Go中的工作方式,以及如何在代码中使用它们。在Go中,Channels是一种编程结构,它允许我们在代码的不同部分之间移动数据,通常来自不同的goro...

Golang引入泛型:Go将Interface「」替换为“Any”

现在Go将拥有泛型:Go将Interface{}替换为“Any”,这是一个类型别名:typeany=interface{}这会引入了泛型作好准备,实际上,带有泛型的Go1.18Beta...

一文带你看懂Golang最新特性(golang2.0特性)

作者:腾讯PCG代码委员会经过十余年的迭代,Go语言逐渐成为云计算时代主流的编程语言。下到云计算基础设施,上到微服务,越来越多的流行产品使用Go语言编写。可见其影响力已经非常强大。一、Go语言发展历史...

Go 每日一库之 java 转 go 遇到 Apollo?让 agollo 来平滑迁移

以下文章来源于GoOfficialBlog,作者GoOfficialBlogIntroductionagollo是Apollo的Golang客户端Apollo(阿波罗)是携程框架部门研...

Golang使用grpc详解(golang gcc)

gRPC是Google开源的一种高性能、跨语言的远程过程调用(RPC)框架,它使用ProtocolBuffers作为序列化工具,支持多种编程语言,如C++,Java,Python,Go等。gR...

Etcd服务注册与发现封装实现--golang

服务注册register.gopackageregisterimport("fmt""time"etcd3"github.com/cor...

Golang:将日志以Json格式输出到Kafka

在上一篇文章中我实现了一个支持Debug、Info、Error等多个级别的日志库,并将日志写到了磁盘文件中,代码比较简单,适合练手。有兴趣的可以通过这个链接前往:https://github.com/...

如何从 PHP 过渡到 Golang?(php转golang)

我是PHP开发者,转Go两个月了吧,记录一下使用Golang怎么一步步开发新项目。本着有坑填坑,有错改错的宗旨,从零开始,开始学习。因为我司没有专门的Golang大牛,所以我也只能一步步自己去...