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

 

运行结果

posted @ 2021-08-30 16:44  松鼠爱吃饼干  阅读(755)  评论(0编辑  收藏  举报
Title