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