English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
準備する必要がある環境:
Bilibiliのアカウントが1つ、ログインする必要があります、そうしないと歴史弹幕記録を確認できません
ネットワークが接続されているコンピュータと使いやすいブラウザ、私はChromeを使用しています
Python3環境およびrequestモジュールのインストールと使用コマンド、換源は早くできます:
pip3 install request -i http://pypi.douban.com/simple
爬取手順: ログイン後、爬取したいビデオのページを開き、開発者ツールを開きます、ChromeではFを使用できます12ショートカットキー、networkを選択してリクエストを監視
歴史弹幕を確認するをクリックし、リクエストを取得
rolldateの後ろの数字は、ビデオに対応する弹幕IDを示し、データはtimestampが弹幕の日付、newが数を示します
歴史弹幕を確認する際に、任意の日付を選択し、確認すると新しいリクエストが送信されます
dmroll ,タイムスタンプ、弹幕ID、以下は指定の日付の弹幕を取得することを示します1507564800は、以下を示します2017/10/10 0:0:0
このリクエストはXMLデータを返します
正規表現を使用してすべての弹幕メッセージを取得し、マッチングパターン
<d p=".*?>.(.*?)</d>'
文字列を結合し、すべての弹幕をローカルファイルに保存します
with open('content.txt', mode='w+', encoding='utf8') as f: f.write(content)
以下は参考コードです。弹幕を日付ごとに単一のファイルに保存します...多いです...
import requests import re import time """ 哔哩哔哩ビデオ弹幕情報を取得する """ # 2043618 はビデオの弹幕IDであり、このアドレスは時間リストを返します # https://www.bilibili.com/video/av1349282 url = 'https://comment.bilibili.com/rolldate,2043618' # 获取弹幕的id 2043618 video_id = url.split(',')[-1] print(video_id) # 获取json文件 html = requests.get(url) # print(html.json()) # 生成时间戳列表 time_list = [i['timestamp'] for i in html.json()] # print(time_list) # 弾幕URL形式 'https://comment.bilibili.com/dmroll,時間スタンプ,弹幕号 # 弾幕内容、総弹幕量が大きいため、各弹幕ファイルを別々に保存 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 # 弾幕内容をマッチング res = re.findall('<d p=".*?>.(.*?)</d>', text) # 時間スタンプを日付形式に変換するには、文字列を整数に変換する必要があります 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)
最終的な効果
その後、分詞生成のワードクラウドや感情分析を行うことができます。また、時間があれば話しましょう...
以下に編集者にあなたの学習の感想をコメントしてください。また、ナイアラベン教程へのサポートに感謝します。