1. 程式人生 > >python爬蟲----b站的彈幕獲取

python爬蟲----b站的彈幕獲取

這次逛到b站的音樂裡面的我以歌聲寄明月中的洛天依原創的《獨醉宣月》,感覺是一首良曲,畫風也很不錯!所以就對它起了“歹徒之心”,而去把彈幕給獲取來作詞雲。

導包

import requests-----網頁請求

import time-----延時操作

import jieba----分詞操作

import numpy as np-----圖片格式轉換為陣列

from PIL  import Image-----圖片的讀取

from wordcloud import WordCloud as wc----詞雲製作

網頁分析

https://www.bilibili.com/video/av1490046/

,這是目標資源。通過檢查元素-->netword,去尋找有關彈幕的連結,會發現到一個與眾不同的東西,名為list.so?oid=XXXX的目標。選中它直接點選preview並沒有什麼內容,正當我們去檢視的它請求頭的時候,把它的url重新去搜索一遍就會發現一絲不可告人的祕密了!

list.so?oid=xxxx的結果,這技術我們要找的彈幕資源了!

網頁獲取和解析 

把所有的操作都封裝成的一個類Bilibili,初始化就設定好請求頭跟url以及彈幕的獲取,由於彈幕的資料是放在一個xml檔案的,所以就把這個目標的檔案給下載了,再用xpath解析xml文件,xpath的作用在於快速去查詢到想要的目標。

"""docstring for Bilibili"""
	def __init__(self,oid):
		self.headers={
		'Host': 'api.bilibili.com',
		'Connection': 'keep-alive',
		'Cache-Control': 'max-age=0',
		'Upgrade-Insecure-Requests': '1',
		'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36',
		'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
		'Accept-Encoding': 'gzip, deflate, br',
		'Accept-Language': 'zh-CN,zh;q=0.9',
		'Cookie': 'finger=edc6ecda; LIVE_BUVID=AUTO1415378023816310; stardustvideo=1; CURRENT_FNVAL=8; buvid3=0D8F3D74-987D-442D-99CF-42BC9A967709149017infoc; rpdid=olwimklsiidoskmqwipww; fts=1537803390'

		}
		self.url='https://api.bilibili.com/x/v1/dm/list.so?oid='+str(oid)
		self.barrage_reault=self.get_page()

	# 獲取資訊
	def get_page(self):
		try:
			# 延時操作,防止太快爬取
			time.sleep(0.5)
			response=requests.get(self.url,headers=self.headers)
		except Exception as e:
			print('獲取xml內容失敗,%s' % e)
			return False
		else:
			if response.status_code == 200:
				# 下載xml檔案
				with open('bilibili.xml','wb') as f:
					f.write(response.content)
				return True
			else:
				return False

	# 解析網頁
	def param_page(self):
		time.sleep(1)
		if  self.barrage_reault:
			# 檔案路徑,html解析器
			html=etree.parse('bilibili.xml',etree.HTMLParser())
			# xpath解析,獲取當前所有的d標籤下的所有文字內容
			results=html.xpath('//d//text()')
			return results

 彈幕去重

先把彈幕內容儲存到一個results的空列表中去,每次都要判斷當前的列表是否存在該元素,不存在就新增,否則,就新增到double_barrage列表和barrage的集合去,方便下面的彈幕內容的重複數量的統計。

# 彈幕去重
	def remove_double_barrage(self):
		'''
		double_arrage:所有重複彈幕的集合
		results:去重後的彈幕
		barrage:每種彈幕內容都儲存一遍
		'''
		double_barrage=[]
		results=[]
		barrage=set()
		for result in self.param_page():
			if result not in results:
				results.append(result)
			else:
				double_barrage.append(result)
				barrage.add(result)
		return double_barrage,results,barrage

彈幕重複內容的計數和詞雲的製作 

# 彈幕重複計算和詞雲的製作
	def make_wordCould(self):
		double_barrages,results,barrages=self.remove_double_barrage()
		# 重詞計數,結果寫進txt檔案
		with open('barrages.txt','w') as f:
			for barrage in barrages:
				# 數量的統計
				amount=double_barrages.count(barrage)
				f.write(barrage+':'+str(amount+1)+'\n')
				
		# 設定停用詞
		stop_words=['【','】',',','.','?','!','。']
		words=[]
		if results:
			for result in results:
				for stop in stop_words:
					# 去除上面的停用詞,再拼接成字串
					result=''.join(result.split(stop))
				words.append(result)
			# 列表拼接成字串
			words=''.join(words)
			words=jieba.cut(words)
			words=''.join(words)
			luo=np.array(Image.open('洛天依.jpg'))
			w=wc(font_path='‪C:/Windows/Fonts/SIMYOU.TTF',background_color='white',width=1600,height=1600,max_words=2000,mask=luo)
			w.generate(words)
			w.to_file('luo.jpg')

 實現的效果

詞雲的製作

彈幕重複內容的計數

歡迎來pick!

相關推薦

[原始碼和文件分享]基於pythonB資料分析(爬蟲+視覺化)

python—B站彈幕資料分析 1 背景 在視訊網站上,一邊看視訊一邊發彈幕已經是網友的習慣。B站就是其中一個比較出名的彈幕網站,許多年輕人都喜歡逛B站,看喜歡的動漫亦或某些UP主做的一些剪輯。本專案,就是對B站彈幕資料進行分析。選取分析的物件是B站上一部國漫《全職高手》。 2 環境的安

python爬蟲----b獲取

這次逛到b站的音樂裡面的我以歌聲寄明月中的洛天依原創的《獨醉宣月》,感覺是一首良曲,畫風也很不錯!所以就對它起了“歹徒之心”,而去把彈幕給獲取來作詞雲。 導包 import requests-----網頁請求 import time-----延時操作 import j

Python網路爬蟲實戰(三)照片定位與B

之前兩篇已經說完了如何爬取網頁以及如何解析其中的資料,那麼今天我們就可以開始第一次實戰了。 這篇實戰包含兩個內容。 * 利用爬蟲呼叫Api來解析照片的拍攝位置 * 利用爬蟲爬取Bilibili視訊中的彈幕 關於爬蟲呼叫Api這一說法,其實就是通過get或者post請求攜帶著引數,將內容發給對方伺服器,伺服器會

Python爬取B的思路和流程

做nlp專案,除了各大電商評論和微博資料,彈幕分析對於輿論和該視訊的推廣都是有幫助的,下面主要說說這麼從B站爬取彈幕。 過程很簡單,我們來看看: 1. 首先,bilibili的彈幕是在xml檔案裡,每個視訊都有其對應的cid和aid,我們取到cid中的數字放入http://comment

Android實現:基於B開源系統(3)-文字的完善和細節調整

Android彈幕實現:基於B站彈幕開源系統(3)本文在附錄1,2的基礎上再次對非同步獲取彈幕並顯示彈幕完善邏輯和程式碼,集中在上層Java程式碼部分:package zhangphil.danmaku; import android.app.Activity; imp

PythonB直播視訊中傳送資訊-python2.7和python3.7均可

#encoding=utf-8 # Created by double lin at 2018/10/10 import requests form_data = { 'color': '16777215', 'fontsize': '25', 'mode': '1', 'msg':

[轉]用python爬蟲的一些技巧總結 zz

內容 req xxxxx pic 個數 相關 choice 都是 observe 來源網站:http://www.pythonclub.org/python-network-application/observer-spider 學用python也有3個多月了,用得最

Python專案2:復讀機

目錄 這個專案是我從B站的一個up主那學到的(原視訊號269525280),感覺很是有趣,就是很欠打哈哈 一、功能 功能很簡單,就是將B站直播間的每條彈幕重新發送一遍。 二、思路 先通過post請求獲取實時彈幕,再用post請求重新發送。 三、實現 1. 獲取彈幕 (1)因為實時彈幕是通過Ajax從伺服

通過web scraper和pythonB短評

在資料分析課上跟著老師一步步學會了一點爬蟲小技巧,覺得很有趣 需要安裝Chrome瀏覽器的web scraper外掛 from selenium import webdriver import pandas as pd from datetime import

Python爬蟲之模擬登入豆瓣獲取最近看過的電影

哈哈哈,模擬登入成功啦啦啦啦啦~~~~~ 重要的事本來要說三遍,不過還是算了== 先上效果圖: 眾所周知,很多網站都設定了登入之後才能獲取檢視頁面的權利,因此模擬登入成了爬取資訊的第一步,這一步

【詳解】b改版後獲取當前正在觀看人數

做本例的原因,是原來抓取 當前線上人數與正在觀看人數 的指令碼出了問題,報錯,無法執行! 我們找到原因,是由於B站改版,主頁的HTML程式碼發生變化,當前正在觀看人數不在網頁上顯示了。所以原來的網頁資訊篩選方法也要變化! 我們是要去尋找一個,不再在網頁顯示的資訊! 【動態

如何利用Python爬蟲從網頁上批量獲取想要的資訊?

  稍微說一下背景,當時我想研究蛋白質與小分子的複合物在空間三維結構上的一些規律,首先得有資料啊,資料從哪裡來?就是從一個涵蓋所有已經解析三維結構的蛋白質-小分子複合物的資料庫裡面下載。這時候,手動一個個去下顯然是不可取的,我們需要寫個指令碼,能從特定的網站選擇性得批量下載需

python爬蟲入門---第二篇:獲取2019年中國大學排名

time 中國 form htm sts odin 代碼 網站 stat 我們需要爬取的網站:最好大學網 我們需要爬取的內容即為該網頁中的表格部分: 該部分的html關鍵代碼為: 其中整個表的標簽為<tbody>標簽,每行的標簽為<tr&

python爬蟲的一些技巧總結 (轉)

用python爬蟲抓站的一些技巧總結 zz Python俱樂部 您的足跡: » 用python爬蟲抓站的一些技巧總結 zz 顯示原始檔修訂記錄最近更改索引登入Python俱樂部PythonPythonClub 首頁Python 基礎Python 常見檔案操作Python 網路

ffmpeg+Python實現BMP4格式音訊與視訊的合併

[TOC] ## 安裝 ### 官網下載 [http://ffmpeg.org/](http://ffmpeg.org/) ![](https://img2020.cnblogs.com/blog/1776217/202010/1776217-20201018044335429-2025314163.png)

Python爬蟲實例:爬取B《工作細胞》短評——異步加載信息的爬取

localtime pre global web for short sco 網頁解析 save 《工作細胞》最近比較火,bilibili 上目前的短評已經有17000多條。 先看分析下頁面 右邊 li 標簽中的就是短評信息,一共20條。一般我們加載大量數據的時候,都

Python爬蟲例項:爬取B《工作細胞》短評——非同步載入資訊的爬取

《工作細胞》最近比較火,bilibili 上目前的短評已經有17000多條。 先看分析下頁面   右邊 li 標籤中的就是短評資訊,一共20條。一般我們載入大量資料的時候,都會做分頁,但是這個頁面沒有,只有一個滾動條。 隨著滾動條往下拉,資訊自動載入了,如下圖,變40

Python獲取B直播中的最新一條評論,複製內容傳送到該直播間中

 注意: 不要在一個直播間浪太久,會被拉黑的,說不定會被罵[哭唧唧] # encoding=utf-8 # Created by double lin at 2018/10/10 import requests # 獲取最新的彈幕列表,並輸出內容 # cookie = { #

堪稱史上最強的python爬蟲,10行程式碼採集B全部視訊!

安裝 you-get pip3 install you-get #!/usr/bin/env python -- coding:utf-8 -- import sys import you_get import os ‘’’ -O 檔名 -o 檔案儲存路徑 –debug d

B視訊資訊爬蟲python

import warnings import requests from bs4 import BeautifulSoup from pymongo import MongoClient import datetime import time #忽略警告提示 warnings.filterwarn