Python obtient le traitement simple du barrage vidéo de la station B

Barrage de la station B

Aperçu

J'ai vu des personnes sur Internet qui ont fait une visualisation de données de barrage en amont, ce qui me semblait assez intéressant, alors je l'ai fait moi-même (sans visualisation). Bénissez Wuhan, bénissez la Chine!

Réalisation de projet

(1) Obtention des données de barrage.J'ai d'abord pensé obtenir les données de barrage de toutes les vidéos d'un certain up, mais j'ai trouvé plus tard un problème: les données de barrage sont stockées en JSON ou XMl. Les données sont identifiées par un numéro d'identification. Je pensais que c'était le numéro AV de la vidéo, mais lorsque j'ai vérifié les éléments, j'ai constaté que ce n'était pas le cas. Reportez-vous à certains documents sur Internet et constatez que les données de barrage sont stockées dans une URL, donc seul le contenu de cette URL est nécessaire.

Python obtient le traitement simple du barrage vidéo de la station B

Python obtient le traitement simple du barrage vidéo de la station B

(2) Pour obtenir des données, utilisez simplement le module de requêtes auquel les robots d'exploration sont habitués

(3) Analyser les données

(4) Persistance des données et traitement simple des données

initialisation

Initialisez d'abord quelques paramètres de base qui doivent être utilisés ci-dessous


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 = []

Initialisez vos propres en-têtes et initialisez une URL de base. Ensuite, initialisez quelques paramètres à utiliser ci-dessous.

Obtenir la page Web

Obtenez des informations sur la page Web et stockez les données localement


# 获取信息
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

Données analytiques

Analysez la page Web et stockez toutes les informations de barrage dans la liste 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))

Persistance des données

Traitement simple des données acquises, et persistance, car il y a d'autres opérations plus tard, j'ai donc sauvegardé deux formulaires.


# 对获取的弹幕数据进行简单处理
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')

De manière générale, cela se termine après la persistance des données, mais pour les opérations suivantes, je fais ici une fonction de comptage d'un certain barrage de mots-clés


# 对含有某关键字的弹幕计数
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))

J'utilise le segment de programme suivant pour appeler l'ensemble du robot.


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()

Remplissez une liste oid dans la plage, parcourez cette liste pour récupérer les données du barrage. S'il n'y a pas de liste oid connue, elle peut être parcourue comme ma méthode ci-dessus.

L'interface d'exécution est la suivante.
Python obtient le traitement simple du barrage vidéo de la station B

Je suppose que tu aimes

Origine blog.51cto.com/15069472/2577358
conseillé
Classement