Python obtiene el procesamiento simple del bombardeo de video de la estación B

Bombardeo de la estación B

Visión general

Vi a algunas personas en Internet haciendo una visualización de datos de bombardeo en la estación superior, lo que me pareció bastante interesante, así que lo hice yo mismo (sin visualización). ¡Bendice a Wuhan, bendice a China!

Realización de proyectos

(1) Obtención de los datos del bombardeo. Originalmente pensé en obtener los datos del bombardeo de todos los videos de un determinado up, pero luego encontré un problema: los datos del bombardeo se almacenan en JSON o XMl. Los datos se identifican con un número de identificación. Pensé que era el número av del video, pero cuando revisé los elementos, descubrí que no lo era. Consulte algunos documentos en Internet y descubrió que los datos del bombardeo se almacenan en una URL, por lo que solo se necesita el contenido de esta URL.

Python obtiene el procesamiento simple del bombardeo de video de la estación B

Python obtiene el procesamiento simple del bombardeo de video de la estación B

(2) Para obtener datos, simplemente utilice el módulo de solicitudes que utilizan los rastreadores

(3) Analizar los datos

(4) Persistencia de datos y procesamiento simple de datos

inicialización

Primero inicialice algunos parámetros básicos que deben usarse a continuación


def __init__(self):
   self.headers = {
    # 自己添加自己的即可
   }
    self.base_url = 'https://api.bilibili.com/x/v1/dm/list.so?oid={}'
    self.url = ''
    self.barrage_result = []
    self.danmu = []
    self.danmu_count = []

Inicialice sus propios encabezados e inicialice una URL básica. Luego, inicialice algunos parámetros que se utilizarán a continuación.

Obtener página web

Obtenga información de la página web y almacene los datos localmente


# 获取信息
def get_page(self):
  # 延时操作,防止太快爬取
  time.sleep(0.5)
  response = requests.get(self.url, headers=self.headers)
  with open('bilibili.xml', 'wb') as f:
       f.write(response.content

Datos analíticos

Analizar la página web y almacenar toda la información del bombardeo en la lista de danmu

# 解析网页  将所有弹幕信息存储在danmu列表中
def param_page(self):
    time.sleep(1)
    if self.barrage_result:
        # 文件路径,html解析器
        html = etree.parse('bilibili.xml', etree.HTMLParser())
        # xpath解析,获取当前所有的d标签下的所有文本内容
        results = html.xpath('//d//text()')
        # 将去重后的弹幕存储起来
        for one in results:
            self.danmu.append(one)
        print('总的实时弹幕数量:', len(self.danmu))

Persistencia de datos

Procesamiento simple de los datos adquiridos, y persistencia, porque hay otras operaciones posteriores, así que guardé dos formularios.


# 对获取的弹幕数据进行简单处理
def ana_result(self):
    print('开始处理弹幕')
    for one_danmu in self.danmu:
        if one_danmu not in self.danmu_count:
            self.danmu_count.append(one_danmu)
    print('弹幕去重后数量为:', len(self.danmu_count))
    with open('tanmu.txt', 'w', encoding='utf-8') as f:
        for danmu in self.danmu_count:
            # 数量的统计
            amount = self.danmu.count(danmu)
            f.write(danmu + ':' + str(amount) + '\n')
    book = xlwt.Workbook(encoding='utf-8-sig', style_compression=0)
    sheet = book.add_sheet('B站部分视频弹幕', cell_overwrite_ok=True)
    sheet.write(0, 0, '弹幕内容')
    sheet.write(0, 1, '弹幕出现次数')
    n = 1
    for danmu in self.danmu_count:
        amount = self.danmu.count(danmu)
        sheet.write(n, 0, danmu)
        sheet.write(n, 1, amount)
        n = n + 1
    book.save(u'B站部分视频弹幕.xls')

En términos generales, finaliza después de que se conservan los datos, pero para las siguientes operaciones, aquí estoy haciendo una función de contar un cierto aluvión de palabras clave


# 对含有某关键字的弹幕计数
def key_count(self, key):
    value = key
    pattern = '.*' + value + '.*'
    tempList = []
    for one in self.danmu:
        obj = re.findall(pattern, one)
        if len(obj) > 0:
            tempList.extend(obj)
    print('弹幕中含有', key, '的弹幕数量为:', len(tempList))

Utilizo el siguiente segmento de programa para llamar al rastreador completo.


def run(self):
    for i in range(145134329, 145144329):
        self.get_url(i)
        self.barrage_result = self.get_page()
        self.param_page()
        self.key_count('武汉加油')
        self.key_count('武汉')
    self.ana_result()

Complete una lista oid en el rango, recorra esta lista para obtener los datos del bombardeo. Si no hay una lista de oid conocida, se puede recorrer como mi método anterior.

La interfaz de ejecución es la siguiente.
Python obtiene el procesamiento simple del bombardeo de video de la estación B

Supongo que te gusta

Origin blog.51cto.com/15069472/2577358
Recomendado
Clasificación