日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

眾所周知,彈幕,即在網絡上觀看視頻時彈出的評論性字幕。不知道大家看視頻的時候會不會點開彈幕,于我而言,彈幕是視頻內容的良好補充,是一個組織良好的評論序列。通過分析彈幕,我們可以快速洞察廣大觀眾對于視頻的看法。

阿喵通過一個關于《八佰》的視頻彈幕數據,繪制了如下詞云圖,感覺效果還是可以的。

用Python爬取B站、騰訊視頻、愛奇藝和芒果TV視頻彈幕

 

點擊并拖拽以移動

 

這里多說一句,小編是一名Python/ target=_blank class=infotextkey>Python開發工程師,這里有我自己整理的一套最新的python系統學習教程,包括從基礎的python腳本到web開發、爬蟲、數據分析、數據可視化、機器學習等。想要這些資料的可以關注小編,并在后臺私信小編:“01”即可領取。

海量的彈幕數據不僅可以繪制此類詞云圖,還可以調用百度AI進行情感分析。那么,我們該如何獲取彈幕數據呢?本文運用Python爬取B站視頻、騰訊視頻、芒果TV和愛奇藝視頻等彈幕,讓你輕松獲取主流視頻網站彈幕數據。

一、B站視頻彈幕

1.網頁分析

本文以爬取up主硬核的半佛仙人發布的《你知道奶茶加盟到底有多坑人嗎?》視頻彈幕為例,首先通過以下步驟找到存放彈幕的真實url。

用Python爬取B站、騰訊視頻、愛奇藝和芒果TV視頻彈幕

 

點擊并拖拽以移動

 

簡單分析url參數,很顯然,date參數表示發送彈幕的時間,其他參數均無變化。因此,只需要改變date參數,然后通過beautifulsoup解析到彈幕數據即可。

2.爬蟲實戰

import requests #請求網頁數據

from bs4 import BeautifulSoup #美味湯解析數據

import pandas as pd

import time

from tqdm import trange #獲取爬取速度

def get_bilibili_url (start, end) :

url_list = []

date_list = [i for i in pd.date_range(start, end).strftime( '%Y-%m-%d' )]

for date in date_list:

url = f"api.bilibili.com/x/v2/dm/his… {date} "

url_list.Append(url)

return url_list

def get_bilibili_danmu (url_list) :

headers = {

"user-agent" : "Mozilla/5.0 (macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/83.0.4103.116 Safari/537.36" ,

"cookie" : "你自己的" #Headers中copy即可

}

file = open( "bilibili_danmu.txt" , 'w' )

for i in trange(len(url_list)):

url = url_list[i]

response = requests.get(url, headers=headers)

response.encoding = 'utf-8'

soup = BeautifulSoup(response.text)

data = soup.find_all( "d" )

danmu = [data[i].text for i in range(len(data))]

for items in danmu:

file.write(items)

file.write( "n" )

time.sleep( 3 )

file.close()

if name == "main" :

start = '9/24/2020' #設置爬取彈幕的起始日

end = '9/26/2020' #設置爬取彈幕的終止日

url_list = get_bilibili_url(start, end)

get_bilibili_danmu(url_list)

print(

"彈幕爬取完成"

)

3.數據預覽

用Python爬取B站、騰訊視頻、愛奇藝和芒果TV視頻彈幕

 

點擊并拖拽以移動

?

二、騰訊視頻彈幕

1.網頁分析

本文以爬取《脫口秀大會 第3季》最后一期視頻彈幕為例,首先通過以下步驟找到存放彈幕的真實url。

用Python爬取B站、騰訊視頻、愛奇藝和芒果TV視頻彈幕

 

點擊并拖拽以移動

 

通過刪減各參數,發現僅有timestamp參數的變化會影響彈幕數據的爬取,且timestamp參數是首項為15,公差為30的等差數列。可以大膽猜測騰訊視頻每30秒更新一頁彈幕數據,該視頻長度為12399秒。而數據格式為標準的json格式,因此json.loads直接解析數據即可。

2.爬蟲實戰

import requests

import json

import time

import pandas as pd

df = pd.DataFrame()

for page in range( 15 , 12399 , 30 ):

headers = { 'User-Agent' : 'Mozilla/5.0 (windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' }

url = 'mfm.video.qq.com/danmu?otype… .format(page)

print( "正在提取第" + str(page) + "頁" )

html = requests.get(url,headers = headers)

bs = json.loads(html.text,strict = False ) #strict參數解決部分內容json格式解析報錯

time.sleep( 1 )

#遍歷獲取目標字段

for i in bs[ 'comments' ]:

content = i[ 'content' ] #彈幕

upcount = i[ 'upcount' ] #點贊數

user_degree =i[ 'uservip_degree' ] #會員等級

timepoint = i[ 'timepoint' ] #發布時間

comment_id = i[ 'commentid' ] #彈幕id

cache = pd.DataFrame({ '彈幕' :[content], '會員等級' :[user_degree],

'發布時間' :[timepoint], '彈幕點贊' :[upcount], '彈幕id' :[comment_id]})

df = pd.concat([df,cache])

df.to_csv( 'tengxun_danmu.csv' ,encoding = 'utf-8' )

print(df.shape)

3.數據預覽

 

用Python爬取B站、騰訊視頻、愛奇藝和芒果TV視頻彈幕

 

點擊并拖拽以移動

 

三、芒果TV彈幕

1.網頁分析

本文以爬取《乘風破浪的姐姐》最后一期視頻彈幕為例,首先通過以下步驟找到存放彈幕的真實url。

用Python爬取B站、騰訊視頻、愛奇藝和芒果TV視頻彈幕

 

點擊并拖拽以移動

?

通過分析參數,我們可以發現,芒果TV會生成首項為0,公差為1的等差數列json彈幕文件,每個json文件存儲前一分鐘內所有的彈幕數據。彈幕數據存放格式為json,數據解析較為簡單。

2.爬蟲實戰

import requests

import json

import pandas as pd

def get_mangguo_danmu (num1, num2, page) :

try :

url = 'bullet-ws.hitv.com/bullet/2020…

print( "正在爬取第" + str(page) + "頁" )

danmuurl = url.format(num1, num2, page)

res = requests.get(danmuurl)

res.encoding = 'utf-8'

#print(res.text)

data = json.loads(res.text)

except :

print( "無法連接" )

details = []

for i in range(len(data[ 'data' ][ 'items' ])): # 彈幕數據在json文件'data'的'items'中

result = {}

result[ 'stype' ] = num2 # 通過stype可識別期數

result[ 'id' ] = data[ 'data' ][ 'items' ][i][ 'id' ] # 獲取id

try : # 嘗試獲取uname

result[ 'uname' ] = data[ 'data' ][ 'items' ][i][ 'uname' ]

except :

result[ 'uname' ] = ''

result[ 'content' ] = data[ 'data' ][ 'items' ][i][ 'content' ] # 獲取彈幕內容

result[ 'time' ] = data[ 'data' ][ 'items' ][i][ 'time' ] # 獲取彈幕發布時間

try : # 嘗試獲取彈幕點贊數

result[ 'v2_up_count' ] = data[ 'data' ][ 'items' ][i][ 'v2_up_count' ]

except :

result[ 'v2_up_count' ] = ''

details.append(result)

return details

#輸入關鍵信息

def count_danmu () :

danmu_total = []

num1 = input( '第一個數字' )

num2 = input( '第二個數字' )

page = int(input( '輸入總時長' ))

for i in range(page):

danmu_total.extend(get_mangguo_danmu(num1, num2, i))

return danmu_total

def main () :

df = pd.DataFrame(count_danmu())

df.to_csv( 'mangguo_danmu.csv' )

if name == 'main' :

main()

3.數據預覽

 

用Python爬取B站、騰訊視頻、愛奇藝和芒果TV視頻彈幕

 

點擊并拖拽以移動

 

四、愛奇藝彈幕

1.網頁分析

本文以爬取《樂隊的夏天第2季》第13期上視頻彈幕為例,首先通過以下步驟找到存放彈幕的真實url。

用Python爬取B站、騰訊視頻、愛奇藝和芒果TV視頻彈幕

 

點擊并拖拽以移動

?

分析彈幕真實url,我們發現,參數5981449914376200是視頻tvid,參數62是tvid倒數4為的前兩位,參數00是tvid的最后兩位,.z前的參數1為視頻總時長除以300秒向上取整。觀察相鄰兩個彈幕文件包,可以看出愛奇藝每5分鐘更新一次彈幕文件。

用Python爬取B站、騰訊視頻、愛奇藝和芒果TV視頻彈幕

 

點擊并拖拽以移動

?

由于直接爬取出來的彈幕文件存在亂碼,需要進行二進制編碼,方可得到最終的彈幕數據。

2.爬蟲實戰

import zlib

import requests

1.爬取xml文件

def download_xml (url) :

bulletold = requests.get(url).content # 二進制內容

return zipdecode(bulletold)

def zipdecode (bulletold) :

'對zip壓縮的二進制內容解碼成文本'

decode = zlib.decompress(bytearray(bulletold), 15 + 32 ).decode( 'utf-8' )

return decode

for x in range( 1 , 12 ):

x是從1到12,12怎么來的,這一集總共57分鐘,愛奇藝每5分鐘會加載新的彈幕,57除以5向上取整

url = 'cmts.iqiyi.com/bullet/62/0… + str(x) + '.z'

xml = download_xml(url)

把編碼好的文件分別寫入17個xml文件中(類似于txt文件),方便后邊取數據

with open( './aiqiyi/iqiyi' + str(x) + '.xml' , 'a+' , encoding= 'utf-8' ) as f:

f.write(xml)

2.讀取xml文件中的彈幕數據數據

from xml.dom.minidom import parse

import xml.dom.minidom

def xml_parse (file_name) :

DOMTree = xml.dom.minidom.parse(file_name)

collection = DOMTree.documentElement

在集合中獲取所有entry數據

entrys = collection.getElementsByTagName( "entry" )

print(entrys)

result = []

for entry in entrys:

content = entry.getElementsByTagName( 'content' )[ 0 ]

print(content.childNodes[ 0 ].data)

i = content.childNodes[ 0 ].data

result.append(i)

return result

with open( "aiyiqi_danmu.txt" , mode= "w" , encoding= "utf-8" ) as f:

for x in range( 1 , 12 ):

l = xml_parse( "./aiqiyi/iqiyi" + str(x) + ".xml" )

for line in l:

f.write(line)

f.write(

"n"

3.數據預覽

 

用Python爬取B站、騰訊視頻、愛奇藝和芒果TV視頻彈幕

 

點擊并拖拽以移動

分享到:
標簽:ython
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定