Python教你爬取某站视频弹幕,并绘制词云图(内含完整源码)

19 篇文章 4 订阅

前言

嗨喽,大家好(o゚v゚)ノ 这里是魔王
请添加图片描述

[课 题]:

Python爬取某站视频弹幕或者腾讯视频弹幕,绘制词云图

[知识点]:

1. 爬虫基本流程
2. 正则
3. requests >>> pip install requests
4. jieba >>> pip install jieba
5. imageio >>> pip install imageio
6. wordcloud  >>> pip install wordcloud

[开发环境]:

Python 3.8
Pycharm

win + R 输入cmd 输入安装命令 pip install 模块名 如果出现爆红 可能是因为 网络连接超时 切换国内镜像源

相对应的安装包/安装教程/激活码/使用教程/学习资料/工具插件 可以找我

爬取弹幕

爬虫基本思路流程:

一. 数据来源分析

1. 确定我们想要数据是什么?
    爬取某站弹幕数据 保存文本txt
2. 通过开发者工具进行抓包分析...
    通过 接口可以直接找到视频的弹幕数据地址

二. 爬虫代码实现步骤:

1. 发送请求,  对于(评论看) 发送请求
    需要注意点:
        - 请求方式确定
        - 请求头参数
2. 获取数据, 获取服务器返回的数据
3. 解析数据, 提取我们想要数据内容, 弹幕数据
4. 保存数据, 把获取下来的数据内容保存txt文本

模拟浏览器对于服务器发送请求

“”"

导入模块

import requests  # 数据请求模块 第三方模块 pip install requests
import re  # 正则表达式模块 内置模块 不需要安装

请添加图片描述

代码

# # 1. 发送请求
# url = '(评论看)'
# # headers 请求头 作用把Python代码进行伪装, 模拟成浏览器去发送请求
# # user-agent 浏览器基本身份标识
# # headers 请求头 字典数据类型
# headers = {
#     'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36'
# }
# # 通过requests模块里面get请求方法, 对于url地址发送请求, 并且携带上headers请求头, 最后用response变量去接收返回数据
# response = requests.get(url=url, headers=headers)
# response.encoding = response.apparent_encoding
# # <Response [200]> response对象 200状态码 表示请求成功
# # 如果你想要获取 网页源代码一样的数据内容的话, 是获取响应体的文本数据
# # 如果服务器返回的数据, 不是完整json数据 字典数据 直接获取response.json()就会报错
# # 2. 获取数据 response.text 返回数据 html字符串数据
# # print(response.text)
# # 3. 解析数据, 解析方式  re[可以直接对于字符串数据进行提取] css xpath [主要根据标签属性/节点提取数据]
# # () 精确匹配 表示想要的数据 泛匹配 .*? 正则表达式元字符 可以匹配任意字符(除了换行符\n以外)
# data_list = re.findall('<d p=".*?">(.*?)</d>', response.text)
# for index in data_list:
#     # mode 保存方式 encoding 编码
#     # pprint.pprint() 格式化输入 json字典数据
#     with open('弹幕.txt', mode='a', encoding='utf-8') as f:
#         f.write(index)
#         f.write('\n')
#         print(index)
url = 'https://mapi.vip.com/vips-mobile/rest/shopping/pc/search/product/rank?callback=getMerchandiseIds&app_name=shop_pc&app_version=4.0&warehouse=VIP_NH&fdc_area_id=104104101&client=pc&mobile_platform=1&province_id=104104&api_key=70f71280d5d547b2a7bb370a529aeea1&user_id=&mars_cid=1634797375792_17a23bdc351b36f2915c2f7ec16dc88e&wap_consumer=a&standby_id=nature&keyword=%E5%8F%A3%E7%BA%A2&lv3CatIds=&lv2CatIds=&lv1CatIds=&brandStoreSns=&props=&priceMin=&priceMax=&vipService=&sort=0&pageOffset=0&channelId=1&gPlatform=PC&batchSize=120&_=1639640088314'

headers = {
    'referer': 'https://category.vip.com/',
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36'
}
response = requests.get(url=url, headers=headers)
print(response.text)

在这里插入图片描述

制作词云图

请添加图片描述

[知识点]:

1. 爬虫基本流程
2. 正则
3. requests >>> pip install requests
4. jieba >>> pip install jieba
5. imageio >>> pip install imageio
6. wordcloud  >>> pip install wordcloud

[开发环境]:

Python 3.8
Pycharm

导入模块

import jieba  # 结巴分词 pip install jieba
import wordcloud  # 词云图 pip install wordcloud
import imageio  # 读取本地图片 修改词云图形
img = imageio.imread('苹果.png')

1. 读取弹幕数据

f = open('弹幕.txt', encoding='utf-8')
text = f.read()
# print(text)

请添加图片描述

2. 分词, 把一句话 分割成很多词汇

text_list = jieba.lcut(text)
print(text_list)
# 列表转成字符串
text_str = ' '.join(text_list)
print(text_str)

3. 词云图配置

wc = wordcloud.WordCloud(
    width=500,  # 宽度
    height=500,  # 高度
    background_color='white', # 背景颜色
    mask=img,
    stopwords={'每', '一个', '了', '的', '梦想', '助力'},
    font_path='msyh.ttc'  # 字体文件
)

wc.generate(text_str)
wc.to_file('词云1.png')

在这里插入图片描述在这里插入图片描述

好了,我的这篇文章写到这里就结束啦!

有更多建议或问题可以评论区或私信我哦!一起加油努力叭(ง •_•)ง

喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!

Python爬取B站视频弹幕制作成地图词云展示,需要几个步骤:首先抓取网页数据,然后处理弹幕内容,最后生成词云并将其放在地图上。这里是一个简化的示例,假设我们使用了`requests`、`BeautifulSoup`库用于网络请求和HTML解析,`lxml`库作为BeautifulSoup的一个替代选择,`wordcloud`和`geopandas`库来创建词云和地图,以及`pyecharts`库来展示地图。 ```python import requests from bs4 import BeautifulSoup import re import pandas as pd from wordcloud import WordCloud import geopandas as gpd from pyecharts import options as opts from pyecharts.charts import Map # 爬取B站弹幕数据 def get_bilibili_danmu(url): response = requests.get(url) soup = BeautifulSoup(response.text, 'lxml') danmu_list = soup.select('.d-share .d-mid .c-danmu-item') # 提取丹字列表 return [danmu.text for danmu in danmu_list] # 清理并统计词频 def process_danmu(danmus): cleaned_danmus = [re.sub(r'\W+', '', danmu) for danmu in danmus] # 去除标点符号和空格 frequency = {word: cleaned_danmus.count(word) for word in set(cleaned_danmus)} return frequency # 创建词云 def create_wordcloud(frequency): wc = WordCloud(font_path='simhei.ttf', width=800, height=600, background_color='white').generate_from_frequencies(frequency) return wc.to_image() # 获取中国省份信息 china_province_data = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres')) # 使用词云数据绘制地图 def map_with_wordcloud(province_data, wordcloud_img): chart = Map() chart.add("", province_data['name'], china_province_data.geometry, maptype="China") img_option = opts.ImageOption(src=wordcloud_img) chart.options设置 = { "visualMap": { "max": max(frequency.values()), "inRange": {"symbolSize": [5, 10]}, }, "series": [{"type": "map", "label": {"show": False}, "itemStyle": img_option}] } chart.render("bilibili_danmu_map.html") # 示例用法 url = "https://www.bilibili.com/video/BV某个视频ID" # 替换为实际的视频URL danmus = get_bilibili_danmu(url) frequency = process_danmu(danmus) wordcloud_img = create_wordcloud(frequency) map_with_wordcloud(china_province_data, wordcloud_img)
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值