前言
現在自媒體平台上經常有一些視頻素材需要保存下來,但是大部分平台下載下來都帶上了平台水印,影響視頻美觀。這次我們用爬蟲,可以爬到高清無水印的視頻
1、selenium模塊的使用
2、requests模塊的使用
3、re正則表達式的使用
- python 3.8
- pycharm 2021專業版 >>> 激活碼
- 谷歌瀏覽器/火狐瀏覽器
- 谷歌驅動/火狐驅動
- requests >>> pip install requests
- selenium >>> pip install selenium
- re
- time
F12或者鼠標右鍵點擊檢查 >>>選擇network 下面 media 過濾音頻和視頻數據包
找到播放地址 (指定的當前視頻的播放地址),視頻播放地址, 是可以在視頻詳情頁網頁源代碼里面可以獲取
- 發送請求, 對於視頻詳情頁發送請求 https://www.douyin.com/video/7012228758782397699
- 獲取數據, 獲取網頁源代碼數據內容
- 解析數據, 提取視頻播放地址 以及 視頻標題
- 保存數據, 把小姐姐視頻保存到本地
import requests # 數據請求模塊 pip install requests import re # 正則表達式模塊 內置模塊 不需要安裝
url = 'https://www.douyin.com/video/6975418738799676680' # headers 偽裝 把python代碼進行偽裝 讓服務器識別不出我是腳本 headers = { 'cookie': 'douyin.com; ttcid=de99440b8a5c4d16affc993730f4983310; ttwid=1%7CwyS5KyrVGXLuX5nmoYq1CJi6RjbegNYEf85fr4LcrRM%7C1632744377%7C0ae37032dafd0b7394ba6c35f7d78fc3bcfc17bf3465ee87b6ffb23c9bd1d9aa; MONITOR_WEB_ID=aa02b1ce-7eca-4ca1-9945-26f6eb8736c4; passport_csrf_token_default=41c044ddb9a7768743f59ef8c445836b; passport_csrf_token=41c044ddb9a7768743f59ef8c445836b; odin_tt=59541282299fd6088773d60702c10e22cf395bbe2ad43387cc5a1f1268e0b49539d2228b027e13642805eaa6c46804e338df3a16d9da9c7178a2a202f7489d12; _tea_utm_cache_6383=undefined; douyin.com; s_v_web_id=verify_kuqvv6p4_YjqU18Ra_QeV7_4zv8_9ZB9_WBVgaVOs06uj; _tea_utm_cache_1300=undefined; __ac_nonce=061681c2f000567586575; __ac_signature=_02B4Z6wo00f01-i76fwAAIDCi7EplXNNuu.on-1AAJtQNYXvhFUOGADQjDBpv-bfFdUV4sLQv1NC67tc-k1IspofGeBvDhfKKqeZNZCOa.hxwhj-AHQQIVnquzZ7vtGjx2HSsG3GQLOgMse720; msToken=6sG90ahzLoVg7R4O5SAh_qe9OXTGEHiSZ4997ef5wn5ep5Jkg1NMJ0O73wMh-xJS3rYRUuk7Z6LBkKolkMEg63exfDDl-gsStfY6HfqBlmaaLfTTX6aDzd8dZvs=; msToken=htFRUeGN-Xof_NiqwMK2xx1UuA3wqQuzgbdl7KoH_hS2T730pt6bw7vz0RzU3BCuGiSq-YQF61qyvnSJY3CZqcUgAuLgBNWiD1vY3KIKZnMmGLoG1W3jMA==; tt_scid=9F5FY0k84EFeUv8G-wjVOB2.pGkWm9KQRvFIte.XLiJNaUyk1vHm5HoJgiDNYpzx9f71', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36' } response = requests.get(url=url, headers=headers)
print(response.text)
提取視頻播放地址,以及視頻標題
title = re.findall('<title data-react-helmet="true"> (.*?)</title>', response.text)[0] href = re.findall('src(.*?)vr%3D%2', response.text)[1] video_url = requests.utils.unquote(href).replace('":"', 'https:') # 解碼
video_content = requests.get(url=video_url).content # 獲取二進制數據內容 with open('video\\' + title + '.mp4', mode='wb') as f: f.write(video_content) print(title, video_url)
from selenium import webdriver # pip install selenium 模擬人的行為操作瀏覽器 import time
driver = webdriver.Chrome() # 實例化一個瀏覽器對象 driver.get('https://www.douyin.com/user/MS4wLjABAAAAK1Zd96kIeExggUquf_wrHUPDQYTZfjdGXClxQAJHyMQ') time.sleep(3) # 延時3秒鍾 手動打碼 drop_down()
lis = driver.find_elements_by_css_selector('#root > div.windows-os > div:nth-child(2) > div > div._67f6d320f692f9e5f19d66f4c8a1ecf9-scss > div._927ae3b0dd790b5b62eae61c7d2fa0bc-scss > div:nth-child(2) > ul > li') for li in lis: url = li.find_element_by_css_selector('a').get_attribute('href') print(url)
def drop_down(): 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)
title = re.sub(r'[\/:*?"<>|]', '_', title)