前言
嗨嘍戈二!大家好呀舒裤,這里是魔王~
一個幫助用戶表達自我,記錄的視頻平臺【蹩裕●記錄美好腾供、智能匹配音樂、一鍵卡點視頻,超多原創(chuàng)鲜滩、濾鏡伴鳖、場景切換幫你...
今天我們就來用Python 采集無水印視頻內(nèi)容
環(huán)境介紹:
- python 3.8 解釋器
- pycharm 2021專業(yè)版 >>> 激活碼 編輯器
- 谷歌瀏覽器
- 谷歌驅(qū)動
- selenium >>> 驅(qū)動 >>> 瀏覽器
模塊使用]:
采集一個視頻
- requests >>> pip install requests
- re
采集多個視頻
- selenium >>> pip install selenium==3.141.0 (3.141.0) 指定模塊版本去安裝
使用這個模塊安裝瀏覽器驅(qū)動 - time
模塊安裝問題:
如果安裝python第三方模塊:
1. win + R 輸入 cmd 點擊確定, 輸入安裝命令 pip install 模塊名 (pip install requests) 回車
2. 在pycharm中點擊Terminal(終端) 輸入安裝命令
安裝失敗原因
失敗一: pip 不是內(nèi)部命令
解決方法: 設(shè)置環(huán)境變量失敗二: 出現(xiàn)大量報紅 (read time out)
解決方法: 因為是網(wǎng)絡(luò)鏈接超時, 需要切換鏡像源
清華:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:https://mirrors.aliyun.com/pypi/simple/
中國科技大學(xué) https://pypi.mirrors.ustc.edu.cn/simple/
華中理工大學(xué):https://pypi.hustunique.com/
山東理工大學(xué):https://pypi.sdutlinux.org/
豆瓣:https://pypi.douban.com/simple/
例如:pip3 install -i https://pypi.doubanio.com/simple/ 模塊名失敗三: cmd里面顯示已經(jīng)安裝過了, 或者安裝成功了, 但是在pycharm里面還是無法導(dǎo)入
解決方法: 可能安裝了多個python版本 (anaconda 或者 python 安裝一個即可) 卸載一個就好
或者你pycharm里面python解釋器沒有設(shè)置好
如何配置pycharm里面的python解釋器?
- 選擇file(文件) >>> setting(設(shè)置) >>> Project(項目) >>> python interpreter(python解釋器)
- 點擊齒輪, 選擇add
- 添加python安裝路徑
pycharm如何安裝插件?
- 選擇file(文件) >>> setting(設(shè)置) >>> Plugins(插件)
- 點擊 Marketplace 輸入想要安裝的插件名字 比如:翻譯插件 輸入 translation / 漢化插件 輸入 Chinese
- 選擇相應(yīng)的插件點擊 install(安裝) 即可
- 安裝成功之后 是會彈出 重啟pycharm的選項 點擊確定, 重啟即可生效
爬蟲實現(xiàn)思路流程: (****)
一. 數(shù)據(jù)來源分析
- 確定爬取的內(nèi)容是什么?
爬取抖音視頻內(nèi)容- 通過開發(fā)者工具進行抓包分析 F12 或者 鼠標右鍵點擊插件選擇network
I. 通過分析已經(jīng)找到播放地址
II. 去分析, 播放地址可以從什么獲取
對于視頻播放url地址 進行一次轉(zhuǎn)碼 *** >>> 等會提取的時候 需要進行解碼二. 代碼實現(xiàn)步驟過程
- 發(fā)送請求, 用python代碼模擬瀏覽器去發(fā)送請求
- 獲取數(shù)據(jù), 獲取服務(wù)器返回響應(yīng)數(shù)據(jù)
- 解析數(shù)據(jù), 提取視頻url地址 以及 視頻標題
- 保存數(shù)據(jù), 保存數(shù)據(jù)到本地
開始我們的代碼
導(dǎo)入模塊
# 導(dǎo)入數(shù)據(jù)請求模塊
import requests # pip install requests win + R 輸入cmd
# 導(dǎo)入正則
import re # 內(nèi)置模塊 不需要大家去安裝
import time # 時間模塊
from selenium import webdriver # pip install selenium==3.141.0
代碼
def drop_down():
"""執(zhí)行頁面滾動的操作""" # javascript
for x in range(1, 30, 4): # 1 3 5 7 9 在你不斷的下拉過程中, 頁面高度也會變的
time.sleep(1)
j = x / 9 # 1/9 3/9 5/9 9/9
# document.documentElement.scrollTop 指定滾動條的位置
# document.documentElement.scrollHeight 獲取瀏覽器頁面的最大高度
js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight * %f' % j
driver.execute_script(js)
# 人怎么去操作瀏覽器的, 就怎么寫代碼...
# 1. 打開一個瀏覽器或者下載一個瀏覽器吧 創(chuàng)建瀏覽器對象(實例化一個瀏覽器對象)
driver = webdriver.Chrome()
# 2. 輸入一個網(wǎng)址 請求網(wǎng)址
driver.get('https://www.douyin.com/user/MS4wLjABAAAA4N4OrZzTSmCPp8vVAqCeyU215Kav2JgFv2Lfy4DNWRs')
driver.implicitly_wait(10)
# 3. 提取所有l(wèi)i標簽 返回列表
# drop_down()
lis = driver.find_elements_by_css_selector('.ECMy_Zdt')
for li in lis:
html_url = li.find_element_by_css_selector('a').get_attribute('href')
print(html_url)
# 1. 發(fā)送請求, 用python代碼模擬瀏覽器去發(fā)送請求
# url = 'https://www.douyin.com/video/7066324040335592738'
# headers 作用 偽裝python代碼 偽裝成瀏覽器 user-agent: 用戶代理 瀏覽器基本身份標識 cookie 用于檢測用戶信息, 是否有登陸賬號
headers = {
'cookie': 'douyin.com; ttcid=444dfe8e89ff4d99b0662076ad171c8775; ttwid=1%7CTnFKlrGi3lHjKf5bshFdP9Nwu_Vsiwo-TxvX9NISgj8%7C1642083887%7Cfbfa904ea2900763eb6ac090bdd09014d80840da1ca485bbfea193d5401b330e; MONITOR_WEB_ID=6d75c626-96a0-4270-ac18-aa0090b5bdb8; MONITOR_DEVICE_ID=341246a2-17c2-4c11-9c70-3ffd2cda0ffa; MONITOR_WEB_ID=c27b9f4a-4917-4256-be93-e948308467e3; odin_tt=0510c3c4196f54b541a96ac64e8b585b3a755be85057da8a1f3fa068e3f7b75ca2de4345e2b856f1e7b3f9455d86079731fe7d07a9f10890f26855d3674858e1; _tea_utm_cache_6383=undefined; douyin.com; strategyABtestKey=1648291293.035; passport_csrf_token=e0b90cb756903c370592bd558c2b0cf5; passport_csrf_token_default=e0b90cb756903c370592bd558c2b0cf5; AB_LOGIN_GUIDE_TIMESTAMP=1648291292963; s_v_web_id=verify_l17q2u00_kNENOykG_BIPh_4VLs_AVDZ_yMj0GtFSNH1u; _tea_utm_cache_1300=undefined; _tea_utm_cache_2285=undefined; THEME_STAY_TIME=299042; IS_HIDE_THEME_CHANGE=1; msToken=5X5W_7rY6cmo_SaaiMyCREV1hCZs-Jd9b7whX5gNCZsd9FU0zCTWYYAl0VhqGGUCjKS3bQf0f191VXdWHPNgqUz08MHEhk6qWhu4wVOlxhLyh3Vliaw37NU=; __ac_nonce=0623f02e00009007ea9bb; __ac_signature=_02B4Z6wo00f010eZ3RAAAIDCJJMde2RciUNHvdmAALPkmrPh1wY1Ey-OtTubjdK69ub9bqUt9DNRx8aP7dPtbOjyxcxyyK6yToF.7c4e615hiM5fYGwFCq0x8jHiY7BYLt6JZLIH8y38eMikd9; home_can_add_dy_2_desktop=1; msToken=fSBhJysNLifNHon5sgM-8n_3ZzJD49mCn9GUHLQydo7g52tCvrhNEKMFhxKEKlAxdE-z7er6yxwoJyO7-C_RdyslJnPejx9AAnkluZ22tSxM4siS7FUuO8E=; tt_scid=T-Exmos8oZiW6Wkb0uEjKsqAdjzxSnn4nznfku9EUmnDmpgq6Me7VDpIiYW4Fv805451; pwa_guide_count=3',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.82 Safari/537.36'
}
response = requests.get(url=html_url, headers=headers) # <Response [200]> 表示的是響應(yīng)對象 200狀態(tài)碼 請求成功
# 2. 獲取數(shù)據(jù)
# print(response.text) # 獲取html字符串?dāng)?shù)據(jù) 服務(wù)器返回response響應(yīng)文本數(shù)據(jù)
# 3. 解析數(shù)據(jù)
# findall 找到所有, 從什么哪里去找什么數(shù)據(jù) 正則匹配出來數(shù)據(jù)返回都是列表數(shù)據(jù) [] 列表 [0] 取第一個元素
title = re.findall('<title data-react-helmet="true">(.*?) - 抖音</title>', response.text)[0]
video_url = re.findall('src(.*?)vr%3D%2', response.text)[0]
# print(video_url)
video_url = requests.utils.unquote(video_url).replace('":"', 'https:') # 解碼 并且使用replace字符串替換
# print(title)
# print(video_url)
# 4. 保存數(shù)據(jù) 視頻數(shù)據(jù)內(nèi)容
video_content = requests.get(url=video_url, headers=headers).content # 對于視頻播放地址發(fā)送請求,獲取二進制數(shù)據(jù)內(nèi)容
with open('video\\' + title + '.mp4', mode='wb') as f:
f.write(video_content)
print(title, '保存完成')
視頻地址
尾語
好了徙硅,我的這篇文章寫到這里就結(jié)束啦榜聂!
有更多建議或問題可以評論區(qū)或私信我哦!一起加油努力叭(? ?_?)?
喜歡就關(guān)注一下博主嗓蘑,或點贊收藏評論一下我的文章叭P胨痢D淠恕!