前言
大家早好婴渡、午好幻锁、晚好吖~
[圖片上傳失敗...(image-98132a-1657699277011)]
環(huán)境使用:
Python 3.8
Pycharm 2021.2版本
ffmpeg <需要設(shè)置環(huán)境變量>
模塊使用:
- import requests >>> pip install requests
內(nèi)置模塊 你安裝好python環(huán)境就可以了
import re
import json
import subprocess
如果安裝python第三方模塊:
win + R 輸入 cmd 點(diǎn)擊確定, 輸入安裝命令 pip install 模塊名 (pip install requests) 回車
在pycharm中點(diǎn)擊Terminal(終端) 輸入安裝命令
基本思路流程:
采集視頻數(shù)據(jù).... 1. 視頻標(biāo)題 2. 視頻內(nèi)容
1、對(duì)著網(wǎng)頁(yè) 鼠標(biāo)右鍵點(diǎn)擊查看網(wǎng)頁(yè)源代碼 ctrl + F 搜索 playinfo
代碼實(shí)現(xiàn)步驟: <通用>
發(fā)送請(qǐng)求, 模擬瀏覽器對(duì)于url地址發(fā)送請(qǐng)求
獲取數(shù)據(jù), 獲取網(wǎng)頁(yè)源代碼 <因?yàn)槲覀兿胍獢?shù)據(jù)內(nèi)容, 來(lái)自于網(wǎng)頁(yè)源代碼>
解析數(shù)據(jù), 提取我們想要數(shù)據(jù)內(nèi)容
保存數(shù)據(jù), 把視頻內(nèi)容完整的保存到本地文件夾
代碼
采集視頻
# 導(dǎo)入數(shù)據(jù)請(qǐng)求模塊
import requests
# 導(dǎo)入正則
import re
# 導(dǎo)入json
import json
# 導(dǎo)入格式化輸出模塊
import pprint
# 導(dǎo)入進(jìn)程模塊
import subprocess
"""
發(fā)送請(qǐng)求
模擬瀏覽器對(duì)于url地址發(fā)送請(qǐng)求
"""
# 確定網(wǎng)址
url = 'https://www.bilibili.com/video/BV1ua411p7iA?vd_source=b2da3931eefc454d41eb6bb5b34749d1'
# python代碼如何模擬瀏覽器? 請(qǐng)求頭 ---> 用偽裝python代碼
headers = {
# referer 防盜鏈 告訴服務(wù)器請(qǐng)求url地址是從哪里跳過(guò)過(guò)來(lái)
'referer': 'https://www.bilibili.com/',
# user-agent 用戶代理 表示瀏覽器基本身份標(biāo)識(shí)
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}
# 發(fā)送請(qǐng)求 ---> 得到響應(yīng)對(duì)象 200 狀態(tài)碼表示請(qǐng)求成功
response = requests.get(url=url, headers=headers)
# <Response [200]>
print(response)
獲取數(shù)據(jù)
# 獲取數(shù)據(jù) 得到響應(yīng)對(duì)象文本數(shù)據(jù) ---> 字符串?dāng)?shù)據(jù)類型
# print(response.text)
"""
解析數(shù)據(jù)
提取我們想要數(shù)據(jù)內(nèi)容
正則表達(dá)式 re ---> 對(duì)于字符串?dāng)?shù)據(jù)進(jìn)行提取
---> 0 1 2 開(kāi)始計(jì)數(shù) -3 -2 -1<---
lis = ['a', 'b', 'c'] lis[0] lis[-3]
re.findall() --> 匹配數(shù)據(jù)返回 列表數(shù)據(jù)類型 列表取值: 根據(jù)索引位置提取內(nèi)容
re 模塊名
.findall() 調(diào)用re模塊里面findall()方法 --> 找到所有 <我們想要數(shù)據(jù)>
從什么地方去找什么數(shù)據(jù)
從 response.text 里面 去找 "title":"(.?)","pubdate" 其中 (.?) 這段是我們想要的
"""
源碼边臼、解答哄尔、教程可加Q裙:832157862
# 獲取標(biāo)題
title = re.findall('"title":"(.*?)","pubdate"', response.text)[0].replace(' ', '')
# 正則替換特殊字符
title = re.sub(r'[\/:*?"<>|]', '', title)
# 獲取shipin數(shù)據(jù)信息
html_data = re.findall('<script>window.__playinfo__=(.*?)</script>', response.text)[0]
# 轉(zhuǎn)成json字典數(shù)據(jù)類型
json_data = json.loads(html_data)
# 字典取值 --> 鍵值對(duì)取值, 根據(jù)冒號(hào)左邊內(nèi)容[鍵] 提取冒號(hào)右邊的內(nèi)容[值]
audio_url = json_data['data']['dash']['audio'][0]['baseUrl']
video_url = json_data['data']['dash']['video'][0]['baseUrl']
print(audio_url)
print(video_url)
print(title)
保存數(shù)據(jù)
--> 403 Forbidden 沒(méi)有訪問(wèn)權(quán)限 --> 防盜鏈 加headers請(qǐng)求頭
# 發(fā)送請(qǐng)求 獲取音頻二進(jìn)制數(shù)據(jù)
audio_content = requests.get(url=audio_url, headers=headers).content
# 發(fā)送請(qǐng)求 獲取視頻二進(jìn)制數(shù)據(jù)
# video__content = requests.get(url=video_url, headers=headers).content
# with open('video\\' + title + '.mp3', mode='wb') as a:
# a.write(audio_content)
# with open('video\\' + title + '.mp4', mode='wb') as v: # 丨
# v.write(video__content)
# 通過(guò)ffmpeg 這個(gè)軟件命令 進(jìn)行視頻合成
cmd = f"ffmpeg -i video\\{title}.mp4 -i video\\{title}.mp3 -c:v copy -c:a aac -strict experimental video\\{title}output.mp4"
subprocess.run(cmd, shell=True)
采集評(píng)論
源碼、解答柠并、教程可加Q裙:832157862
# 導(dǎo)入數(shù)據(jù)請(qǐng)求模塊
import time
import requests
for page in range(1, 11):
# 請(qǐng)求網(wǎng)址
time.sleep(1)
url = f'https://api.bilibili.com/x/v2/reply/main?csrf=9b972b9803693b4f5c0d6a042b2d0c0e&mode=3&next={page}&oid=215631694&plat=1&type=1'
# 請(qǐng)求頭
headers = {
# 'origin': 'https://www.bilibili.com',
'referer': 'https://www.bilibili.com/video/',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36',
}
# 發(fā)送請(qǐng)求
response = requests.get(url=url, headers=headers)
# 獲取數(shù)據(jù)
content_list = [i['content']['message'] for i in response.json()['data']['replies']]
print(content_list)
# for 遍歷輸出內(nèi)容
for content in content_list:
with open('評(píng)論.txt', mode='a', encoding='utf-8') as f:
f.write(content)
f.write('\n')
print(content)
制作詞云
# 導(dǎo)入結(jié)巴分詞模塊
import jieba
# 導(dǎo)入詞云模塊
import wordcloud
# 讀取文件內(nèi)容
f = open('評(píng)論.txt', encoding='utf-8')
txt = f.read()
print(txt)
string = ' '.join(jieba.lcut(txt))
print(string)
wc = wordcloud.WordCloud(
width=700, # 寬
height=700, # 高
background_color='white', # 背景顏色
font_path='msyh.ttc', # 設(shè)置字體
scale=15, # 規(guī)模
)
wc.generate(string)
wc.to_file('評(píng)論詞云.png')
尾語(yǔ)
好了岭接,我的這篇文章寫到這里就結(jié)束啦!
有更多建議或問(wèn)題可以評(píng)論區(qū)或私信我哦臼予!一起加油努力叭(? ?_?)?
喜歡就關(guān)注一下博主鸣戴,或點(diǎn)贊收藏評(píng)論一下我的文章叭!U呈啊窄锅!
[圖片上傳失敗...(image-c27b8f-1657699277011)]