你会使用python爬虫抓取弹幕吗
作者:璨星烁 发布时间:2021-04-28 03:06:50
前言
时隔108天,何同学在B站发布了最新的视频,《【何同学】我用108天开了个灯…》。那么就让我们用爬虫,爬取视频的弹幕,看看小伙伴们是怎么评价的吧
一、爬虫是什么?
百度百科这样说:自动获取网页内容的程序。在我理解看来,爬虫就是~~“在网络上爬来爬去的…”住口!~~
那么接下来就让我们看看如何养搬运B站弹幕的“虫”吧
二、饲养步骤
1.请求弹幕
首先,得知道爬取的网站url是什么。对于B站弹幕而言,弹幕所在位置是有固定格式的:
http://comment.bilibili.com/+cid+.xml
ok,那么问题来了,cid是什么呢?不用管是什么,我告诉你怎么获取。
1.打开视频后点击F12,切换到“网络”,在筛选器处填入“cid”进行筛选。
2.点击筛选出的网络信息,在右端Payload处找到cid
3.到此,我们就知道了何同学视频弹幕的网络链接:
http://comment.bilibili.com/499893135.xml
4.接着就是发送网络请求,获取网络页面资源。Python有很多发送网络请求的库。比如:
urllib库
requests库
我们用reaquests库演示
发送请求的代码如下
(示例):
#【何同学】我用108天开了个灯......视频的cid:499893135
#弹幕所在地
url = "http://comment.bilibili.com/499893135.xml"
#发送请求
req = requests.get(url = url)
#获取内容响应的内容
html_byte = req.content
#将byte转为str
html_str = str(html_byte,"utf-8")
还有个值得提一下的地方是,发送请求的请求头可以加上,伪装自己是浏览器访问。可以通过header参数,加上user-agent,获取方式如下:
那么,代码就是下面这样了:
#假装自己是浏览器
header ={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36 Edg/98.0.1108.43'
}
#【何同学】我用108天开了个灯......视频的cid:499893135
#弹幕所在地
url = "http://comment.bilibili.com/499893135.xml"
#发送请求
req = requests.get(url = url, headers=header)
#获取内容响应的内容
html_byte = req.content
#将byte转为str
html_str = str(html_byte,"utf-8")
2.解析弹幕
html_str是html文件的格式,我们需要对其进行处理,来获取我们想要的信息。这个时候,BeautifulSoup库就要闪亮登场了,我们用它来处理得到的html文件
代码如下(示例):
#解析
soup = BeautifulSoup(html,'html.parser')
#找到html文件里的<d>标签
results = soup.find_all('d')
#把标签里的文本提取出来
contents = [x.text for x in results]
#存为字典
dic ={"contents" : contents}
contents就是弹幕字符串列表了,存成字典是为了下一步…
3.存储弹幕
把弹幕信息存储成excel,也有好多库可以用。比如:
xlwt库
pandas库
我们就用pandas库把
代码如下(示例):
把用第二步得到的字典创建dataFrame,然后用pandas库的一个API存下就行了
#用字典创建了一个电子表格
df = pd.DataFrame(dic)
df["contents"].to_excel('htx.xlsx')
4.总代码
import requests
from bs4 import BeautifulSoup
import pandas as pd
def main():
html = askUrl()
dic =analyse(html)
writeExcel(dic)
def askUrl():
#假装自己是浏览器
header ={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36 Edg/98.0.1108.43'
}
#【何同学】我用108天开了个灯......视频的cid:499893135
#弹幕所在地
url = "http://comment.bilibili.com/499893135.xml"
req = requests.get(url = url, headers=header)
html_byte = req.content#字节
html_str = str(html_byte,"utf-8")
return html_str
def analyse(html):
soup = BeautifulSoup(html,'html.parser')
results = soup.find_all('d')
#x.text表示要放到contents中的值
contents = [x.text for x in results]
#保存结果
dic ={"contents" : contents}
return dic
def writeExcel(dic):
#用字典创建了一个电子表格
df = pd.DataFrame(dic)
df["contents"].to_excel('htx.xlsx')
if __name__ == '__main__':
main()
三、总结
爬虫简单来说呢,就三步:
1.发送网络请求,获取资源
2.进行搜索等操作来获取有用信息
3.存储信息
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!
来源:https://blog.csdn.net/qq_48169012/article/details/122813998


猜你喜欢
- 1. 图像缩放1.2. 使用命令import cv2# 缩放def resize(img, k, inter):
- 一、从线性规划到整数规划1.1、为什么会有整数规划?线性规划问题的最优解可能是分数或小数。整数规划是指变量的取值只能是整数的规划。这在实际问
- 最近一直在做Dnn模块的开发,过程中碰到这么一个问题,需要同时插入N条数据,不想在程序里控制,但是SQL Sever又不支持数组参数.所以只
- 开发环境:python版本2.X#!/usr/bin/env python# -*- coding:utf-8 -*-# 适合python版
- 在网上的一些资料的基础上自己又添了些新内容,算是Python socket编程练手吧。#coding=utf-8import socketi
- 前言还是最近在做的一个小项目,后端用的是Django搭配RestFramework做接口,前端第一次尝试用京东开源的Taro框架来做多端(目
- 本文实例讲述了mysql重复索引与冗余索引。分享给大家供大家参考,具体如下:重复索引:表示一个列或者顺序相同的几个列上建立的多个索引。冗余索
- 系列文章目录第一章 Python常见库matplotlib之画图文字的中文显示第二章 Python常见库matplotlib之画图中各个模块
- 注:以下所有操作都在CentOS 6.5 x86_64位系统下完成。#准备工作#在安装MySQL之前,请确保已经使用yum安装了以下各类基础
- 一、准备工作开始之前,先参考上一篇: struts2.3.24 + spring4.1.6 + hibernate4.3.11 +
- 从视频中提取音频安装 moviepypip install moviepy相关代码:audio_file = work_path +
- 使用tf.keras.MaxPooling1D出现错误错误如下ValueError: Negative dimension size cau
- 【OpenCV】⚠️高手勿入! 半小时学会基本操作 ⚠️ 圆圈检测概述OpenCV 是一个跨平台的计算机视觉库, 支持多语言, 功能强大.
- 以GraphViz为例:下载安装好的路径名字为C:/Program Files (x86)/Graphviz2.38import osos.
- 听到一些人说现在做产品设计很没有成就感。没有什么创造力,除了抄袭模仿(称之为竞争分析)、千篇一律(又称规范标准)还有复杂的流程、粗制滥造的表
- 本文实例为大家分享了python使用tkinter实现简单计算器的具体代码,供大家参考,具体内容如下class Counter: #引入t
- Asp(Active Server Pages)是Web服务器端脚本编写环境,可以使用Vbscript/Jscript两种脚本来编写.作为我
- 1、注册一个新浪应用,得到appkey和secret,以及token,将这些信息写入配置文件sina_weibo_config.ini,内容
- 给明文密码加密的流程:import base64pwd_after_encrypt = base64.b64encode(b'thi
- k8s 的调度器 kube-schedulerkube-scheduler 作为 k8s 的调度器,就好比人的大脑,将行动指定传递