亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python爬取b站任意up主所有視頻彈幕

系統 1794 0

爬取b站彈幕并不困難。要得到up主所有視頻彈幕,我們首先進入up主視頻頁面,即https://space.bilibili.com/id號/video這個頁面。按F12打開開發者菜單,刷新一下,在network的xhr文件中有一個getSubmitVideo文件,這個文件里就有我們需要的視頻av號了。如果直接抓取頁面是拿不到的,因為視頻是異步加載的。

在這個文件里的data標簽下,有一個count是視頻總數,pages是第幾頁,vlist就是我們要找的視頻信息了,里面的aid就是每個視頻的av號。它的請求鏈接是https://space.bilibili.com/ajax/member/getSubmitVideos?mid=av號&pagesize=30&tid=0&page=1&keyword=&order=pubdate。pagesize是每次傳多少個視頻信息。

Python爬取b站任意up主所有視頻彈幕_第1張圖片
拿到所有的視頻av號后,我們打開視頻頁面。同樣是按F12打開開發者菜單,刷新一下,在network的xhr中有兩個文件,一個以pagelist為開頭,另一個以list.so為開頭。這兩個文件,第一個里包含了視頻的cid,第二個就是根據cid拿到的彈幕文件。同樣,我們根據視頻av號訪問第一個文件的請求url,得到cid,再根據cid訪問第二個請求url就可以了。
Python爬取b站任意up主所有視頻彈幕_第2張圖片
最后,我們對拿到的彈幕文件進行適當的整理。主要是從文件中的標簽中提取出彈幕文字,然后去重,計數,再儲存到文件里。

            
              import requests
from lxml import etree
import os
import json
from bs4 import BeautifulSoup
from requests import exceptions
import re
import time

'''
遇到不懂的問題?Python學習交流群:821460695滿足你的需求,資料都已經上傳群文件,可以自行下載!
'''
def download_page(url):
    headers = {
  'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"
  }
    data = requests.get(url, headers=headers)
    return data


def get_video_page(space_num):
    base_url = "https://www.bilibili.com/av"
    url = "https://space.bilibili.com/ajax/member/getSubmitVideos?mid={}&pagesize=99&tid=0&page=1&keyword=&order=pubdate".format(space_num)
    data = json.loads(download_page(url).content)['data']
    total = data['count']
    page_num = int(total/99) + 1
    video_list = data['vlist']
    video_url = []
    for video in video_list:
        video_url.append(base_url + str(video['aid']))
    for i in range(2, page_num+1):
        time.sleep(1)
        url = "https://space.bilibili.com/ajax/member/getSubmitVideos?mid={}&pagesize=99&tid=0&page={}&keyword=&order=pubdate".format(space_num, i)
        data = json.loads(download_page(url).content)['data']
        video_list = data['vlist']
        for video in video_list:
            video_url.append(base_url + str(video['aid']))
    return video_url


def get_barrage(name, space_num):
    video_list = get_video_page(space_num)
    aid_to_oid = 'https://api.bilibili.com/x/player/pagelist?aid={}&jsonp=jsonp'
    barrage_url = 'https://api.bilibili.com/x/v1/dm/list.so?oid={}'
    for url in video_list:
     # 降低爬取速度防止被禁
        time.sleep(1)
        aid = re.search(r'\d+$',url).group()
     # 這里有時會出現莫名其妙的錯誤
        try:
            oid = json.loads(download_page(aid_to_oid.format(aid)).content)['data'][0]['cid']
            barrage = download_page(barrage_url.format(oid)).content
        except requests.exceptions.ConnectionError:
            print('av:',aid)
            continue
        if not os.path.exists('barrage/{}'.format(name)):
            os.makedirs('barrage/{}'.format(name))
        with open('barrage/{}/av{}.xml'.format(name,aid),'wb') as f:
            f.write(barrage)


def reorganize_barrage(name):
    results = {}
    for filename in os.listdir('barrage/{}'.format(name)):
        html = etree.parse('barrage/{}/{}'.format(name,filename), etree.HTMLParser())
     # 提取出xml文件中
              
                標簽中的文字
        barrages = html.xpath('//d//text()')
        for barrage in barrages:
       # 有些彈幕會有回車符
            barrage = barrage.replace('\r', '')
            if barrage in results:
                results[barrage] += 1
            else:
                results[barrage] = 1
    if not os.path.exists('statistical result'):
        os.makedirs('statistical result')
    with open('statistical result/{}.txt'.format(name), 'w', encoding='utf8') as f:
        for key,value in results.items():
            f.write('{}\t:\t{}\n'.format(key.rstrip('\r'),value))


if __name__ == '__main__':
  # 在space list.txt文件里,我是用“up主名稱:id”的格式來儲存的,
    with open('space list.txt', 'r') as f:
        for line in f.readlines():
            name, num = line.split(':')
            print(name)
            get_barrage(name, space_number)
            reorganize_barrage(name)

              
            
          

更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!?。?/p>

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲精品丝袜在线一区波多野结衣 | 色综合久久久久久久久五月性色 | 久久天堂成人影院 | 九九视频免费 | 五月天激情视频在线观看 | 第一福利在线观看 | 九色综合久久综合欧美97 | 九九热视频在线观看 | 中国一级毛片视频 | 欧美色大成网站www永久男同 | 国产精品一级毛片不收费 | 在线免费午夜视频 | 99久久精品免费视频 | 在线视频一区二区三区 | 在线观看免费视频a | 尤物视频在线播放 | 久久久久久久久影院 | 草久久久 | 国产精品福利视频 | 国产va免费高清在线观看 | 亚洲日韩在线视频 | 四虎影视在线看 | 越猛烈欧美xx00动态图免费 | 国产精品免费aⅴ片在线观看 | 日本中文一区 | 天天操综合 | 欧美洲久久日韩欧美 | 图片亚洲va欧美va国产综合 | 一区二区三区免费视频网站 | 久久久亚洲欧洲日产国码二区 | 欧美日本日韩 | baoyu777永久免费视频 | 御姐色网 | 国产精品美女久久久久网 | 中文字幕久热精品视频免费 | 国产在线一91区免费国产91 | 五月情视频在线观看 | a一级毛片免费播放 | 日本岛国片在线观看 | 看一级特黄a大片日本片 | 欧美一级特黄一片免费 |