English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Implementazione della funzione di estrazione dei commenti di Bilibili con python3

Ambiente necessario:

Un account di Bilibili deve essere login prima, altrimenti non è possibile visualizzare la cronologia dei bulletti storici

Un computer connesso a internet e un browser comodo, uso Chrome

Ambiente Python3 e modulo request, installazione e utilizzo dei comandi, il cambio di sorgente è veloce:

pip3 install request -i http://pypi.douban.com/simple

Passaggi di cattura: Accedi e apri la pagina del video da catturare, apri lo strumento di sviluppo, Chrome può utilizzare il tasto F12 come scorciatoia, seleziona network per ascoltare le richieste

 

Clicca su 'Visualizza commenti storici' per ottenere la richiesta



Il numero dopo rolldate rappresenta il numero del commento del video corrispondente, i dati restituiti contengono timestamp che rappresenta la data del commento, new che rappresenta il numero


Scegli un giorno qualsiasi per guardare i commenti storici, verrà inviata una nuova richiesta

dmroll, timestamp, numero_dello_commento, indica di ottenere i commenti di quella data, 1507564800 indica 2017/10/10 0:0:0



La richiesta restituisce dati xml


Ottieni tutti i messaggi dei commenti utilizzando l'espressione regolare, modello di abbinamento

<d p=".*?">(.*?)</d>

Concatenare le stringhe, salvare tutti i commenti in un file locale

with open('content.txt', mode='w+', encoding='utf8') as f:  f.write(content)

Ecco un esempio di codice di riferimento, salvare i commenti come file singolo per data... perché ci sono troppi...

import requests
import re
import time
"""
  Catturare le informazioni dei commenti del video Bilibili
"""
# 2043618 è il numero del commento del video, questo indirizzo restituirà l'elenco dei timestamp
# https://www.bilibili.com/video/av1349282
url = 'https://comment.bilibili.com/rolldate,2043618'
# ottenere l'id dei commenti 2043618
video_id = url.split(',')[-1]
stampare(video_id)
# ottenere il file json
html = requests.get(url)
# stampare(html.json())
# generare l'elenco dei timestamp
time_list = [i['timestamp'] for i in html.json()]
# stampare(time_list)
L'indirizzo del sito dei commenti Bilibili è 'https://comment.bilibili.com/dmroll,timestamp,numero_dello_commento'
# Contenuto dei commenti, poiché la quantità totale dei commenti è troppo grande, salvare ogni file di commenti separatamente
for i in time_list:
  content = ''
  j = 'https://comment.bilibili.com/dmroll,{0},{1}'.format(i, video_id)
  print(j)
  text = requests.get(j).text
  # Abbinare il contenuto dei commenti
  res = re.findall('<d p=".*?">(.*?)</d>', text)
  # Convertire il timestamp in formato data, è necessario convertire la stringa in un intero
  timeArray = time.localtime(int(i))
  date_time = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
  print(date_time)
  content += date_time + '\n'
  for k in res:
    content += k + '\n'
  content += '\n'
  file_path = 'txt/{}.txt'.format(time.strftime("%Y_%m_%d", timeArray))
  print(file_path)
  with open(file_path, mode='w+', encoding='utf8') as f:
    f.write(content)

Effetto finale



Puoi poi fare alcune analisi di tokenizzazione per generare nuvole di parole o analisi sentimentali, ne parliamo più tardi...

Puoi lasciare un commento qui sotto con le tue riflessioni di apprendimento, e grazie per il tuo supporto ai tutorial di grida.

Ti potrebbe interessare