利用python爬虫实现:抖音短视频无水印视频下载

  各位小伙伴,之前一段时间迷上了抖音小姐姐视频,但是下载的视频都有水印,于是自己用Python 写了个爬取小姐姐视频的工具,大家可以直接拷贝到自己编译器上运行。经过半天的琢磨,自己用python搞出来一个根据抖音分享视频链接去除水印并下载的功能。此外,我还利用pyqt5写了个操作界面,这样可以方便不懂代码的人使用。后面代码我都会一一贴上来。备注:这个只是个人兴趣,参考代码的小伙伴切莫用于非法商业途径;

环境:python3.0    pychram/eric  

url 获取方式:页面右边的【分享】按钮-》 复制链接。  提取出里面的Url就好了。

直接上代码:


# -*- coding:utf-8 -*-

from splinter.driver.webdriver.chrome import Options, Chrome

from splinter.browser import Browser

from contextlib import closing

import requests, json, time, re, os, sys

 

class douyin():

    def __init__(self):

        pass

    """

    视频下载

    Parameters:

        video_url: 带水印的视频地址

        video_name: 视频名

    Returns:

        无

    """

    def video_downloader(self,  video_url, video_name=r'douyinsss.mp4'):

    

        size = 0

        headers = {

                "User-Agent": "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Maxthon/4.3.2.1000 Chrome/30.0.1599.101 Safari/537.36"}

        try:

           with closing(requests.get(video_url, headers = headers,  stream=True, verify = False)) as response:

                chunk_size = 1024

                #print(response.text)

                content_size = int(response.headers['content-length']) 

                if response.status_code == 200:

                    sys.stdout.write('  [文件大小]:%0.2f MB\n' % (content_size / chunk_size / 1024))

                    """

                    with open(video_name, 'ab') as file:

                        file.write(response.content)

                        file.flush()

                        print('receive data,file size : %d   total size:%d' % (os.path.getsize(video_name), content_size))

                    """

                    with open(video_name, "wb") as file:  

                        for data in response.iter_content(chunk_size = chunk_size):

                            file.write(data)

                            size += len(data)

                            file.flush()

        

                            #sys.stdout.write('  [下载进度]:%.2f%%' % float(size / content_size * 100) + '\r')

                            #sys.stdout.flush()

                    print('视频下载完了...')

        except Exception as e:

            print(e)

            print('下载出错啦.....')

       

    """

    视频下载地址获取

    Parameters:

        video_url: 带水印的视频地址

    Returns:

        视频下载链接,视频名字

    """

    def downloadUrlGet(self,  video_url):

        name = ''

        downloadUrl = ''

        headers = {

                'Proxy-Connection':'keep-alive', 

                'Host': 'v.douyin.com', 

                'Upgrade-Insecure-Requests':'1', 

                'Accept-Encoding': 'gzip, deflate', 

                'Accept-Language': 'zh-CN,zh;q=0.9', 

                "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36", 

                'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8'

            }

        req = requests.get(url = video_url, headers = headers,  verify = False)

        newUrl = req.url

        

        #print(req.text)

        print('newUrl:%s'%newUrl)

        print(req.history)

        #302重定向后的请求

        headers = {

                'Proxy-Connection':'keep-alive', 

                'Host': 'www.iesdouyin.com', 

                'Upgrade-Insecure-Requests':'1', 

                'Accept-Encoding': 'gzip, deflate', 

                'Accept-Language': 'zh-CN,zh;q=0.9', 

                "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36", 

                'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8'

            }

        req = requests.get(url = newUrl, headers = headers,  verify = False)

        reply = req.text

        #print(reply)

        p = reply.find('playAddr: "') +   len('playAddr: "')

        downloadUrl = reply[p: reply.find('"',  p)]

        print('downloadUrl:%s'%downloadUrl)

        p = reply.find('"name nowrap">') + len('"name nowrap">')

        name = reply[p: reply.find('<',  p)]

        print(name)

        return downloadUrl,  name

 

 

"""  开始主任务  """

url = 'http://v.douyin.com/dU2Dsn/'

handel = douyin()

downloadUrl,  name = handel.downloadUrlGet(url)

handel.video_downloader(url, name)


 

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值