Python批量下載抖音高清無水印小視頻


開發環境:

Python 3.6

Pycharm

瀏覽器驅動 >>> 和瀏覽器(谷歌或者火狐) 版本最相近的一個(下載驅動之后和你代碼放到同一個文件里面就可以使用)

模塊使用:

  • requests >>> pip install requests
  • selenium >>> pip install selenium
  • re
  • os

想要學習Python的可以點這里,每晚8點都有免費Python案例的講解,還有老師在線一對一的解答

本篇文章流程(爬蟲基本思路):

一. 數據來源分析

  1. 確定需求 (我們要爬的內容是什么?)
    抖音視頻內容

  2. 通過開發者工具進行抓包分析
    I. (F12/鼠標右鍵點擊檢查可以打開) 選擇network 選擇 media 找播放地址
    II. 找播放地址來源 >>>

二. 代碼實現過程

  1. 發送請求 對於視頻詳情頁發送請求

  2. 獲取數據 獲取網頁源代碼數據

  3. 解析數據 提取視頻播放地址 以及視頻標題

  4. 下載保存

爬取一個視頻

安裝所需模塊

import requests  # 數據請求 第三方模塊 pip install requests
import re  # 正則表達式模塊
import os  # 文件操作模塊
import time # 時間模塊
from selenium import webdriver  # pip install selenium

 

發送請求

url = 'https://www.douyin.com/video/6942071509448002846'
# headers 請求頭 偽裝作用
# user-agent: 瀏覽器的基本信息
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}
response = requests.get(url=li_url, headers=headers)

 

解析數據 通過 re 正則表達式

# 正則表達式匹配出來的內容是列表
#  貪婪模式[我全都要]  非貪婪模式(?)
title = re.findall('<title data-react-helmet="true"> (.*?)</title>', response.text, re.S)
new_title = change_title(title)
# 返回是列表 是沒問題的吧 [1] 索引取值  第一個元素索引位置是0 第二個元素索引位置 1
html_data = re.findall('src(.*?)vr%3D%2', response.text)

 

進行解碼

video_url = requests.utils.unquote(html_data)

 

保存數據

with open(filename + new_title + '.mp4', mode='w') as f:
    f.write(video_content)  # 寫入內容
    print(title)

 

創建文件夾

filename = 'video\\' # 文件名字
if not os.path.exists(filename): # 判斷如果沒有這個文件夾的話
    os.mkdir(filename) # 創建這個文件

 

批量爬取

實例化一個瀏覽器的對象

driver = webdriver.Chrome()
# 訪問url地址網址
driver.get('https://www.douyin.com/user/MS4wLjABAAAAY8bNCoKh6fT_I2ZRaCkVB4pcVPIeoC0a9jOWWPUKvJw')
# 延時三秒
time.sleep(3)
# 下滑操作
drop_down()

 

模擬滑動操作

def drop_down():
    """執行頁面滾動的操作"""  # javascript
    for x in range(1, 30, 4):  # 在你不斷的下拉過程中, 頁面高度也會變的
        time.sleep(1)
        j = x / 9
        # document.documentElement.scrollTop  指定滾動條的位置
        # document.documentElement.scrollHeight 獲取瀏覽器頁面的最大高度
        js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight * %f' % j
        driver.execute_script(js)

 

返回的列表 里面元素是對象

lis = driver.find_elements_by_css_selector('div._927ae3b0dd790b5b62eae61c7d2fa0bc-scss > div:nth-child(2) > ul li')
for li in lis:
    # 調用 find_element_by_css_selector() 方法
    li_url = li.find_element_by_css_selector('a').get_attribute('href')

driver.quit()

 

替換特殊字符

def change_title(title):
    pattern = re.compile(r"[\/\\\:\*\?\"\<\>\|\n]")  # '/ \ : * ? " < > |'
    new_title = re.sub(pattern, "_", title)  # 替換為下划線
    return new_title

 

運行結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM