前言
嗨嘍!大家好,這里是魔王吶~
在昨天,我快樂刷刷刷得時(shí)候吻贿,有幸刷到一個(gè)非常好看得內(nèi)容
于是我就點(diǎn)開UP主得主頁打算把她得內(nèi)容全部保存下來串结,慢慢欣賞~
現(xiàn)在,我把代碼分享給大家舅列,畢竟肌割,好東西得互相分享,對(duì)不~
首先帐要,我們得做好準(zhǔn)備步驟把敞,盡量跟我得一致哦~
環(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(終端) 輸入安裝命令
如何配置pycharm里面的python解釋器?
- 選擇file(文件) >>> setting(設(shè)置) >>> Project(項(xiàng)目) >>> python interpreter(python解釋器)
- 點(diǎn)擊齒輪, 選擇add
- 添加python安裝路徑
pycharm如何安裝插件?
- 選擇file(文件) >>> setting(設(shè)置) >>> Plugins(插件)
- 點(diǎn)擊 Marketplace 輸入想要安裝的插件名字 比如:翻譯插件 輸入 translation / 漢化插件 輸入 Chinese
- 選擇相應(yīng)的插件點(diǎn)擊 install(安裝) 即可
- 安裝成功之后 是會(huì)彈出 重啟pycharm的選項(xiàng) 點(diǎn)擊確定, 重啟即可生效
Python的應(yīng)用學(xué)習(xí)方向有哪些?
這里稍微介紹一下,讓你對(duì)python有更詳細(xì)得認(rèn)知~
網(wǎng)站開發(fā):
如目前優(yōu)秀的全棧的 django榨惠、框架flask 奋早,都繼承了python簡(jiǎn)單盛霎、明確的風(fēng)格,開發(fā)效率高耽装、易維護(hù)愤炸,與自動(dòng)化運(yùn)維結(jié)合性好。
python已經(jīng)成為自動(dòng)化運(yùn)維平臺(tái)領(lǐng)域的事實(shí)標(biāo)準(zhǔn)掉奄;
爬蟲程序
在爬蟲領(lǐng)域规个,Python幾乎是霸主地位,將網(wǎng)絡(luò)一切數(shù)據(jù)作為資源姓建,通過自動(dòng)化程序進(jìn)行有針對(duì)性的數(shù)據(jù)采集以及處理诞仓。
從事該領(lǐng)域應(yīng)學(xué)習(xí)爬蟲策略、高性能異步IO速兔、分布式爬蟲等墅拭,并針對(duì)Scrapy框架源碼進(jìn)行深入剖析,從而理解其原理并實(shí)現(xiàn)自定義爬蟲框架憨栽。
數(shù)據(jù)分析
Python語言相對(duì)于其它解釋性語言最大的特點(diǎn)是其龐大而活躍的科學(xué)計(jì)算生態(tài)帜矾,在數(shù)據(jù)分析、交互屑柔、可視化方面有相當(dāng)完善和優(yōu)秀的庫(kù).
自動(dòng)化腳本
執(zhí)行許多重復(fù)的任務(wù)屡萤,例如閱讀 pdf、播放音樂掸宛、查看天氣死陆、打開書簽、清理文件夾等等唧瘾,使用自動(dòng)化腳本
就無需手動(dòng)一次又一次地完成這些任務(wù)措译,非常方便。
人工智能
各種人工智能算法都基于Python編寫饰序,尤其PyTorch之后领虹,Python作為AI時(shí)代頭牌語言的位置基本確定。
游戲開發(fā)/輔助 自動(dòng)化測(cè)試 運(yùn)維
思路流程: <通用>
一. 數(shù)據(jù)來源分析
確定我們需求 采集什么網(wǎng)站上面的什么數(shù)據(jù)內(nèi)容
分析我們想要視頻數(shù)據(jù)以及視頻標(biāo)題內(nèi)容 -->> 可以請(qǐng)求那個(gè)網(wǎng)址得到相應(yīng)數(shù)據(jù)內(nèi)容
B站視頻內(nèi)容, 是可以在網(wǎng)頁源代碼有的 搜索playinfo就有相關(guān)數(shù)據(jù)... 通過開發(fā)者工具抓包分析
二. 代碼實(shí)現(xiàn)步驟
發(fā)送請(qǐng)求, 對(duì)于視頻播放頁面url地址發(fā)送請(qǐng)求 https://www.bilibili.com/video/BV11R4y1L7Fc
獲取數(shù)據(jù), 獲取網(wǎng)頁源代碼 <有很多數(shù)據(jù)內(nèi)容>
解析數(shù)據(jù), 提取我們想要數(shù)據(jù)內(nèi)容
保存數(shù)據(jù), 可以把視頻內(nèi)容保存本地文件夾
代碼
因?qū)徍嗽蚯笤ィ野丫W(wǎng)址刪掉了塌衰,小可耐們可以自己補(bǔ)全哦,也可私信找我領(lǐng)取完整源碼吶~??
代碼大部分我都有寫注釋蝠嘉,希望對(duì)你們有幫助哦~
一最疆、導(dǎo)入模塊
import os
# 導(dǎo)入數(shù)據(jù)請(qǐng)求模塊 <使用請(qǐng)求工具去發(fā)送請(qǐng)求>
import requests
# 導(dǎo)入正則模塊
import re
# 導(dǎo)入json
import json
# 導(dǎo)入格式化輸出模塊
import pprint
# 導(dǎo)入進(jìn)程模塊
import subprocess
import threading
二、對(duì)視頻播放頁面url地址發(fā)送請(qǐng)求
def get_video_content(bv_id):
"""
爬蟲 模擬瀏覽器對(duì)于url地址發(fā)送請(qǐng)求...
"""
url = f'{bv_id}' # 確定網(wǎng)址, 確定自己要網(wǎng)址是那個(gè)
# headers請(qǐng)求頭, 用來偽裝python代碼, 防止被服務(wù)器識(shí)別出來是你爬蟲程序.... user-agent 用戶代理 表示瀏覽器基本身份標(biāo)識(shí)
# 通過requests模塊里面get請(qǐng)求方法<函數(shù)>對(duì)于url地址發(fā)送請(qǐng)求... 等號(hào)左邊的都是自定義變量 不能以數(shù)字開頭 不建議使用關(guān)鍵詞命名
# 有顏色url是函數(shù)參數(shù) 關(guān)鍵字傳參
response = requests.get(url=url, headers=headers) # <Response [200]> 響應(yīng)對(duì)象 200狀態(tài)碼表示請(qǐng)求成功
print(response)
三蚤告、 獲取數(shù)據(jù)
# 獲取網(wǎng)頁源代碼 <有很多數(shù)據(jù)內(nèi)容>
# print(response.text) # response.text 獲取響應(yīng)對(duì)象文本數(shù)據(jù) >>> 字符串?dāng)?shù)據(jù)
四努酸、解析網(wǎng)站
"""
提取我們想要數(shù)據(jù)內(nèi)容 re css xpath 建議都要學(xué)習(xí), 選擇最適合用的
re.findall('"title":"(.*?)",', response.text)
使用re模塊里面findall<找到所有>方法 從什么地方去找什么數(shù)據(jù)
從response.text 里面去找 "title":"(.*?)", 其中 (.*?) 這段是我們想要數(shù)據(jù)
正則匹配提取出來數(shù)據(jù), 返回列表數(shù)據(jù) [0] 根據(jù)索引位置取值, 在python里面索引位置是從0開始計(jì)數(shù)
程序員本質(zhì) cv工程師... IT薪資高, 高植發(fā)...
如果你想要就業(yè) 去面試的時(shí)候 理光頭..... 薪資多開5K
"""
title = re.findall('"title":"(.*?)",', response.text)[0]
# 前端小知識(shí)點(diǎn) 前端標(biāo)簽兩個(gè)兩個(gè)一起 response.text 字符串類型
html_data = re.findall('<script>window.__playinfo__=(.*?)</script>', response.text)[0] # 獲取視頻信息 也是復(fù)制
# print(html_data)
# print(type(html_data)) # <class 'str'> type() 查看數(shù)據(jù)類型
json_data = json.loads(html_data) # 轉(zhuǎn)數(shù)據(jù)類型
# print(json_data)
# print(type(json_data)) # <class 'dict'> 字典數(shù)據(jù)類型, 字典取值 不會(huì)5 會(huì)6 根據(jù)冒號(hào)左邊的內(nèi)容, 提取冒號(hào)右邊內(nèi)容
# pprint.pprint(json_data)
# print(json_data['code'])
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ù)
# 圖片 視頻 音頻 特定格式文件 都獲取二進(jìn)制數(shù)據(jù)進(jìn)行保存
# audio_content = requests.get(url=audio_url, headers=headers).content # response.content 獲取二進(jìn)制數(shù)據(jù)內(nèi)容
# video_content = requests.get(url=video_url, headers=headers).content # response.content 獲取二進(jìn)制數(shù)據(jù)內(nèi)容
# with open('video\\' + title + '.mp3', mode='wb') as f:
# f.write(audio_content)
# with open('video\\' + title + '.mp4', mode='wb') as f:
# f.write(video_content)
#
# 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)
# os.remove(f'video\\{title}.mp4')
# os.remove(f'video\\{title}.mp3')
for page in range(1, 13):
print(f'正在采集第{page}頁數(shù)據(jù)內(nèi)容')
link = f'/x/space/arc/search?mid=1305006386&ps=30&tid=0&pn={page}&keyword=&order=pubdate&jsonp=jsonp'
headers = {
'Referer': '',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}
"""
response.text 獲取文本
response.content 獲取二進(jìn)制
response.json() 獲取json字典數(shù)據(jù)
m3u8
"""
resp_json = requests.get(url=link, headers=headers).json()
for index in resp_json['data']['list']['vlist']:
bv_id = index['bvid']
print(bv_id)
尾語
成功沒有快車道杜恰,幸福沒有高速路获诈。
所有的成功仍源,都來自不倦地努力和奔跑,所有的幸福都來自平凡的奮斗和堅(jiān)持
——?jiǎng)?lì)志語錄
本文章就寫完啦~感興趣的小伙伴可以復(fù)制代碼去試試
你們的支持是我最大的動(dòng)力@雍伞镜会!記得三連哦~ ?? 歡迎大家閱讀往期的文章呀~