1. 程式人生 > >Python 3.X爬取抖音所有視訊

Python 3.X爬取抖音所有視訊

今天閒著沒事刷抖音,看到好多好看的小姐姐,突然想到把抖音裡好看好玩的視訊都下載來多方便看省的一會一個廣告,一會一個推送的。

我先是用fiddler抓包工具進行了抖音app的抓包,
fiddler的使用:https://blog.csdn.net/lyd135364/article/details/78384285
分析了帶有feed地址名的介面,發現這次改版後抖音的一個小bug,我今天也度娘了下以前的抖音視訊爬取方式,但都在最近一次的改版中被進行檔案加密了。
以前的爬取和android逆向,都是呼叫原getUserInfo()方法,但是更新後的抖音,這個方法所在的包都沒了。原加密的as和cp引數加密直接得到結果的方法就用不成了
今天在嘗試爬取的過程中,發現的小bug就是:直接在抓包的過程中,把as和cp的值寫死就成了。雖然是動態獲取的,但不會進行二次驗證,只要說它們是由抖音自己加密組合成的資料,並且能通過後臺的解籤就可以了。
這次更新後,驗證的方式變了。變成驗證驗證引數:ts,_rticket和mas。
ts為秒級時間戳,_rticket為毫秒級時間戳,mas的生成加密方式與這二者有關,與其他引數無關。(抖音後臺有關於時間的驗證,超過一定時間,三者作廢)
判斷原因是:我把as和cp引數寫死不變的情況下,更改上述三個引數,依舊可以通過scrapy訪問到資料,如果只更改這三者其中之一,那麼無法訪問到了。
現在我需要一個大手子或者逆向破解的大佬幫個忙,把這一步走過去,就能正常scrapy爬取了。
這裡寫圖片描述


從我這個截圖中可以看到。我這裡的cp和as與fiddler抓包中的值是不同的,但是我依然能通過這個藉口訪問到,並且每次重新整理訪問的結果都是不同的6條。ts沒有在圖中擷取到,只擷取到了_rticket和mas的值。我自己代買中的as和cp還是我中午第一次抓包時候的值。現在已經是22:30分了。。依然能用,所以說。。我的判斷沒有錯吧。
希望有大佬能看到能告訴我這個加密方式是什麼樣的,萬分感謝。(這幾天如果還是搞不定的話,我就只有自己動手逆向破解去了。哎。。但感覺搞不定)
如果您想聯絡我的話:qq.290660285 vx:lottery_cs
下面一段就是目前比較流行的獲取方式了。直接複製貼上即可使用。
如果這篇文章對你有幫助的話,是我的榮幸。
如果有錯誤,歡迎指正,我會以最快的速度修改的。

下面的程式碼,原始碼來自:https://www.jianshu.com/p/80e5b3c25905
我只是將原始碼從2.X,升級到了3.X,並且將原有的一些小問題改掉後能正常執行。
並且對下載下來的檔案做了整理和合並資料夾

其實一開始只要訪問分享出來的短連結,就能獲取到該使用者的userid,也就是頁面中
class=”focus-btn go-author” 的data-id的值。
如果想更方便更直接的下載,完全不像看到這麼多的步驟,
可以嘗試在下面的基礎上修改,改成無頭的訪問方式,然後在修改流程流程就是:
1:在main方法中,輸入分享出來的視訊短連線
2:在run方法中,先獲取NickName(暱稱)和userid,然後傳入到douyin_spider方法中
3:獲取json資料,然後進行視訊下載
很簡單的操作,這裡我就不修改了,動一動看官勤勞的小手,這樣對這篇程式碼能更熟悉

這是下載下來的截圖:
這裡寫圖片描述

from selenium import webdriver
from bs4 import BeautifulSoup
import json
import requests
import sys
import time
import os
import uuid
from contextlib import closing


class douyin_spider(object):
    """docstring for douyin_spider"""

    def __init__(self, user_id, _signature, dytk):
        self.Chrome_path = 'C:/Users/Administrator/AppData/Local/Google/Chrome/Application/chromedriver.exe'
        self.userid = user_id
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36'}
        mobile_emulation = {'deviceName': 'iPhone X'}
        # chrome瀏覽器模擬iPhone X進行頁面訪問
        options = webdriver.ChromeOptions()
        # options = webdriver.Chrome()
        options.add_experimental_option("mobileEmulation", mobile_emulation)
        self.browser = webdriver.Chrome(executable_path=self.Chrome_path, chrome_options=options)
        self._signature = _signature
        self.dytk = dytk
        self.url = 'https://www.amemv.com/aweme/v1/aweme/post/?user_id=%s&count=32&max_cursor=0&aid=1128&_signature=%s&dytk=%s' % (
            self.userid, self._signature, self.dytk)

    def handle_url(self):
        url_list = [self.url, ]
        self.browser.get(self.url)
        web_data = self.browser.page_source
        soup = BeautifulSoup(web_data, 'lxml')
        web_data = soup.pre.string
        web_data = json.loads(str(web_data))
        # print('--------------------')
        # print(web_data)
        if web_data['status_code'] == 0:
            while web_data['has_more'] == 1:
                # 最大載入32條視訊資訊,has_more等於1表示還未全部載入完
                max_cursor = web_data['max_cursor']
                # 獲取時間戳
                url = 'https://www.amemv.com/aweme/v1/aweme/post/?user_id=%s&count=32&max_cursor=%s&aid=1128&_signature=%s&dytk=%s' % (
                    self.userid, max_cursor, self._signature, self.dytk)
                url_list.append(url)
                self.browser.get(url)
                web_data = self.browser.page_source
                soup = BeautifulSoup(web_data, 'lxml')
                web_data = soup.pre.string
                web_data = json.loads(str(web_data))
            else:
                max_cursor = web_data['max_cursor']
                # 獲取時間戳
                url = 'https://www.amemv.com/aweme/v1/aweme/post/?user_id=%s&count=32&max_cursor=%s&aid=1128&_signature=%s&dytk=%s' % (
                    self.userid, max_cursor, self._signature, self.dytk)
                url_list.append(url)
        else:
            url_list = []
        return url_list

    def get_download_url(self, url_list):
        title_url = 'https://www.amemv.com/share/user/{}?u_code=hg518ec9&timestamp=1535886010&utm_source=qq&utm_campaign=client_share&utm_medium=android&app=aweme&iid=42820089177'.format(self.userid)
        html = requests.get(title_url)

        soup = BeautifulSoup(html.text,'lxml')
        nick_name = soup.find('p',{'class':'nickname'}).get_text()
        download_url = []
        title_list = []
        if len(url_list) > 0:
            for url in url_list:
                self.browser.get(url)
                web_data = self.browser.page_source
                soup = BeautifulSoup(web_data, 'lxml')
                web_data = soup.pre.string
                web_data = json.loads(str(web_data))
                #print('------------------')
                #print(web_data)
                if web_data['status_code'] == 0:
                    for i in range(len(web_data['aweme_list'])):
                        download_url.append(web_data['aweme_list'][i]['video']['play_addr']['url_list'][0])
                        title_list.append(web_data['aweme_list'][i]['share_info']['share_desc'])

            return download_url, title_list,nick_name
        else:
            print('該作者目前還未上傳作品')

    def videodownloader(self, url, title,nick_name):
        size = 0
        path ='抖音下載/%s/' %nick_name +title + '.mp4'

        with closing(requests.get(url, headers=self.headers, stream=True, verify=False)) as response:
            chunk_size = 1024
            content_size = int(response.headers['content-length'])
            if response.status_code == 200:
                if os.path.exists(path) ==True:
                    print('檔案:%s已經存在' %path)
                else:
                    print
                    '%s is downloading...' % title
                    sys.stdout.write('[File Size]: %0.2f MB\n' % (content_size / chunk_size / 1024))

                    with open(path, 'wb') as f:
                        for data in response.iter_content(chunk_size=chunk_size):
                            f.write(data)
                            size += len(data)
                            f.flush()
                            sys.stdout.write('[Progress]: %0.2f%%' % float(size / content_size * 100) + '\r')
                            sys.stdout.flush()

            else:
                print
                response.status_code

    def run(self):
        try:
            url = 'https://www.amemv.com/aweme/v1/aweme/post/?user_id=%s&count=32&max_cursor=0&aid=1128&_signature=%s&dytk=%s' % (
                self.userid, self._signature, self.dytk)
            url_list = self.handle_url()
            download_url, title_list, nick_name = self.get_download_url(url_list)
            path = '抖音下載/%s' % nick_name
            result_op = os.path.exists(path)
            if result_op:
                for i in range(len(download_url)):
                    url = download_url[i]
                    title = title_list[i]
                    self.videodownloader(url, title, nick_name)
            else:
                print(result_op)
                os.mkdir(path)

        except:
            print('出現錯誤')
        finally:
            self.browser.close()



if __name__ == '__main__':
    # 建立物件
    # 傳入三個引數,user_id,_signature,dytk
    #經過我執行整理後,發現只需要傳入想要下載up主的userid即可,後兩個引數完全不用修改,可以直接下載
     #根據userid的不同,生成不同的下載使用者的nickname資料夾,然後再在此資料夾下生成 
     #mp4檔案
    #userid的獲取方式,見原連結
    douyin_spider = douyin_spider('95870186531', 'WSMdixASAql5PsaSQZJ1MVkjHZ', '539f2c59bb57577983b3818b7a7f32ef')
    douyin_spider.run()

相關推薦

Python 3.X所有視訊

今天閒著沒事刷抖音,看到好多好看的小姐姐,突然想到把抖音裡好看好玩的視訊都下載來多方便看省的一會一個廣告,一會一個推送的。 我先是用fiddler抓包工具進行了抖音app的抓包, fiddler的使用:https://blog.csdn.net/lyd135

使用python爬蟲,批量app視訊

使用python爬蟲,批量爬取抖音app視訊(requests+Fiddler+appium) 抖音很火,樓主使用python隨機爬取抖音視訊,並且無水印下載,人家都說天下沒有爬不到的資料,so,樓主決定試試水,純屬技術愛好,分享給大家。。 1.樓主首先使用Fiddler4來抓取手機抖音

使用python-requests+Fiddler4+appium爬蟲,批量視訊

抖音很火,大家都知道,樓主決定使用python爬取抖音小視訊,人家都說天下沒有爬不到的資料,so,樓主決定試試水,純屬技術愛好,分享給大家。。 1.樓主首先使用Fiddler4來抓取手機抖音app這個包,具體配置的操作,網上有很多教程供大家參考。 上面得出抖音的視訊的url,這些url均能在網頁中

使用pythonapp視訊

記錄一下如何用python爬取app資料,本文以爬取抖音視訊app為例。程式設計工具:pycharmapp抓包工具:mitmproxyapp自動化工具:appium執行環境:windows10思路:假設已經配置好我們所需要的工具1、使用mitmproxy對手機app抓包獲取我

pythonAPP視訊教程

本文講述爬取抖音APP視訊資料(本文未完,後面還有很多地方優化總結) 公眾號回覆:抖音 即可獲取原始碼 python爬蟲人工智慧大資料(公眾號) 1、APP抓包教程,需要用到fiddler 2、尋找返回使用者aweme_count和uid資料的介面 進入我

Python爬蟲---視訊

[TOC] ##前言 最近一直想要寫一個抖音爬蟲來批量下載抖音的短視訊,但是經過幾天的摸索我發現了一個很嚴重的問題......抖音實在是難爬!從一開始的網頁分析中就有著很多的坑,但是這幾天的摸索也不是一無所獲,我鼓搗出來了一個問題版的抖音爬蟲(操作較為複雜),所以我也想通過這篇部落格來記錄下我分析網頁的過程,

Top20視訊,並自動播放

from time import sleep from glob import iglob from requests import get from natsort import natsorted from win32api import ShellExecute from moviepy.ed

怎麽用Python小視頻? 資深程序員都這樣的(附源碼)

aid option rip size with open url var mark open 簡介 抖音,是一款可以拍短視頻的音樂創意短視頻社交軟件,該軟件於2016年9月上線,是一個專註年輕人的15秒音樂短視頻社區。用戶可以通過這款軟件選擇歌曲,拍攝15秒的音樂短視頻

PythonAPP,竟然只需要十行程式碼

環境說明 環境: python 3.7.1 centos 7.4 pip 10.0.1 部署 [[email protected] ~]# python3.7 --version Python 3.7.1 [[email protected] ~]#

Python爬蟲之如何小姐姐的視訊

介紹這次爬的是當下大火的APP--抖音,批量下載一個使用者釋出的所有視訊。各位也應該知道,抖音只

爬蟲熱門音樂

爬取抖音的熱門 音樂 詳細程式碼在下面 響應體內容工作流 預設情況下,當你進行網路請求後,響應體會立即被下載。你可以通過 stream 引數覆蓋這個行為,推遲下載響應體直到訪問 Response.content 屬性: tarb

教你甜曲《好喜歡你》,感受荷爾蒙的氣息

最近發現一首很火的歌,瞬間讓你感受到濃濃的青春懵懂感,這就是王廣允的《好喜歡你》。說實話,爬這種愛意濃濃的歌曲似乎不是我們這種單身XX應有的想法,但是還是想體會一下那些青春歲月裡的小幸福,話不多說,程式碼走起來。   本來想這裡直接貼上歌曲的連結,但是由於版權問題,大家可以去網易雲

短視訊改良版

[toc] #使用更簡單的方法 在我之前的一篇部落格中,我用了構造網址的方法來獲取抖音短視訊,但是在今天我又一次的研究抖音短視訊的時候發現了一個更加簡單的方法,發現我之前的分析實在是太過繁瑣了,所以有寫了一篇部落格來記錄下這個方法。([上一篇部落格](https://www.cnblogs.com/cheri

python 3.x 爬蟲基礎---正則表示式(案例:貓眼資訊,寫入txt,csv,下載圖片)

python 3.x 爬蟲基礎 前言   正則表示式是對字串的一種邏輯公式,用事先定義好的一些特定字元、及這些特定字元的組合,組成一個“規則的字串”,此字串用來表示對字串的一種“過濾”邏輯。正在在很多開發語言中都存在,而非python獨有。對其知識點進行總結後,會寫一個demo。 1.正

對你沒有看錯!不到10行Python程式碼完成熱門視訊

最近研究了一下抖音的爬蟲,目前實現了熱門話題和熱門音樂下面所有相關視訊的爬取,並且我已經將該爬蟲打包成了一個 Python 庫併發布,名稱就叫做 douyin,利用該庫可以使用不到 10 行程式碼完成熱門視訊的下載、相關音樂的下載以及結構化資訊的儲存。 本文就來詳細介紹一下這個庫的用法和一些核心

python爬蟲-20行代碼王者榮耀所有英雄圖片,小白也輕輕松松

需要 tis tca wcf 爬取 html eas request 有用 1.環境 python3.6 需要用到的庫: re、os、requests 2.簡介 王者榮耀可以算得上是比較受歡迎的手遊之一了,應該有不少的人都入坑過農藥,我們今天的目的就是要爬取王者榮耀的高

python3 學習 3python爬蟲之動態載入的圖片,以百度圖片為例

轉: https://blog.csdn.net/qq_32166627/article/details/60882964 前言: 前面我們爬取圖片的網站都是靜態的,在頁面中右鍵檢視原始碼就能看到網頁中圖片的位置。這樣我們用requests庫得到頁面原始碼後,再用bs4庫解析標籤即可儲存圖片

python美團所有結婚商家(包括詳情)

 本文章主要介紹爬取美團結婚欄目所有商家資訊(電話)  第一步:爬取區域 分析鞍山結婚頁面 https://as.meituan.com/jiehun/ 分析重慶結婚頁面 https://cq.meituan.com/jiehun/ 分析可得:url基本相同,我們只需爬取美團

不到 10 行程式碼完成熱門視訊

最近研究了一下抖音的爬蟲,目前實現了熱門話題和熱門音樂下面所有相關視訊的爬取,並且我已經將該爬蟲打包成了一個 Python 庫併發布,名稱就叫做 douyin,利用該庫可以使用不到 10 行程式碼完成熱門視訊的下載、相關音樂的下載以及結構化資訊的儲存。 本文就來詳細介紹一下

使用python12306上面所有車次資料

在爬取12306之前需要做的工作就是: 1,分析請求過程 2,分析是否需要處理cookie 3,編寫程式碼 4,測試爬取網站是否有訪問次數限制 5,部署到正式伺服器上 這裡重點寫 如何分析請求過程: 這是12306上面查詢車次的介面,出發地和目的地 是我們需要輸入的, 如