弹幕情感分析(一)—B站弹幕的爬取

657 阅读2分钟

弹幕是一种有趣的,随着视频时间发展而出现的评论。这种评论一般都带有根据视频内容发展而作出的神回复。

当然弹幕的情感不一定都是有趣吸引人的,其中还是有大量的负面内容,比如对于视频创作者的辱骂等等。 因此对于视频的弹幕筛选是有一定的合理性。

通过弹幕的情感分析,对每个弹幕的情感进行一个评分,最后对于评分进行筛选。

弹幕爬取

以B站一哥老番茄的杀手大结局为例:

写爬虫我们首先要获取所要爬取的界面的url地址

image.png

正常打开B站的页面 会发现大量的地址、数据 1、这时候点clear进行清除 2、并点击弹幕列表旁的展开 获得弹幕的url地址

这时候获得了弹幕列表区域的json数据和url地址 image.png

逐个url地址点开:会发现返回的要么是ok 要么是乱码,并没有发现弹幕资源,因此可以推断乱码就是弹幕。

这时候我们对url地址进行请求获取响应。

import requests
from bs4 import BeautifulSoup 
import re
session=requests.session()#实例化一个session对象
url="https://api.bilibili.com/x/v2/dm/web/seg.so?type=1&oid=302941541&pid=501811924&segment_index=3"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
          'Accept-Encoding':'gzip, deflate'}
res=session.get(url,headers=headers)#对应的cookie已经保存到session当中去了
res.content.decode('utf-8','ignore')

这里有两个关键点:
1、session进行请求获得返回的数据。利用session进行请求可以在后面多次请求的时候会带上cookies,这样避免被网页识别为爬虫 2、decode的参数ignore解码的乱码直接忽略掉

结果如下:

image.png

这时候会很乱可以在代码里面加一个"美味汤" 进行数据的解析和格式调整

soup = BeautifulSoup(res.content.decode('utf-8','ignore'))

结果如下:

image.png

这时候对返回的结果进行观察 发现在:后面@前面的就是需要的弹幕内容

使用re正则表达式对结果筛选: 并且将:和@删除

data=str(soup)
data=re.findall(":[^:]+?@",data)
for i in range(len(data)):
    data[i]=data[i][1:-1]
data

image.png

弹幕列表中的一些符号标点什么的 会在情感分析的数据预处理当中进行处理。

以上就是对弹幕爬取的代码 最后这里附上完整代码:

import requests
from bs4 import BeautifulSoup 
import re
session=requests.session()#实例化一个session对象
url="https://api.bilibili.com/x/v2/dm/web/seg.so?type=1&oid=302941541&pid=501811924&segment_index=3"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
          'Accept-Encoding':'gzip, deflate'}
res=session.get(url,headers=headers)#对应的cookie已经保存到session当中去了
res.content.decode('utf-8','ignore')
# res.encoding="utf-8"  修改解码类型 text解码
soup = BeautifulSoup(res.content.decode('utf-8','ignore'))
soup
data=str(soup)
data=re.findall(":[^:]+?@",data)
for i in range(len(data)):
    data[i]=data[i][1:-1]
data

最后附上个人公众号,有兴趣的小伙伴可以关注我的公众号。会不定时更新数据挖掘,NLP,爬虫等数据算法知识

image.png