Python幫你打包下載所有抖音背景音樂

公眾號兩個月

5月和朋友聊天立叛,決定開設(shè)一個公眾號,以博客的方式每天記載Python知識和有趣的內(nèi)容贡茅。之后經(jīng)過前期準備與摸索終于在5月31號秘蛇,首次在公眾號嘗試發(fā)文,而今已過兩月時間顶考。

公眾號首次發(fā)文

剛開始每天下班就期待著開始自己所謂的創(chuàng)作赁还,而現(xiàn)在每晚發(fā)愁該寫些什么來滿足大家的口味;起初媳婦兒大力支持我學習村怪,如今因為寫公眾號沒時間陪家人秽浇,時而會引發(fā)矛盾。細數(shù)兩個月更新56篇的文章甚负,用一位簡書朋友的評論高產(chǎn)似母豬柬焕,哈哈....
簡友評論

由于做公眾號的初衷,是整理學習內(nèi)容梭域,而非多數(shù)人那樣的想將自媒體作為副業(yè)斑举,所以沒有找過大號求推薦,也沒有主動向其他公眾號推薦文章病涨。起初讓朋友幫忙發(fā)個朋友圈擴散下富玷,之后就是每天清晨轉(zhuǎn)發(fā)下自己的文章,偶爾將文章轉(zhuǎn)載至公司內(nèi)網(wǎng)博客既穆。大家都說東西再好不宣傳也沒人知道赎懦,但兩個月下來收獲了800粉絲,還是讓我很感動幻工。不知道還能這樣每周五篇的堅持更新多久励两,因為自從開了公眾號,每天都是2囊颅、3點睡覺当悔,兩個月下來嚴重缺乏睡眠,而且經(jīng)常熬夜最近胃病又犯了踢代。但對比之前每天回來刷刷抖音盲憎、看小說、做做飯的日子充實多了胳挎。只希望能得到家人和朋友們更多的支持饼疙,謝謝大家。

剛才提到抖音串远?

不知道什么時候開始宏多,中國出現(xiàn)了南抖音儿惫、北快手的互文格局(東市買駿馬澡罚,西市買鞍韉...)伸但。剛才提到了,之前比較喜歡刷抖音留搔,對于我這種佛系程序猿更胖,看網(wǎng)上這些整容妹子基本一個樣。喜歡抖音主要是兩個初衷隔显,學做菜聽音樂却妨。朋友之前常說,人家抖音看妹子看的樂呵呵括眠,你看人家做菜也能津津有味彪标,一個人在那兒傻笑...民以食為天,我看到色香味俱全的菜掷豺,做的那么好吃的樂呵樂呵還不行么捞烟。
抖音捧紅了很多人,也讓很多本不怎么讓大家熟知的歌曲当船、BGM题画,經(jīng)過翻唱、混剪與視頻搭配德频,從而傳播大街小巷苍息。什么“若不是你,突然闖進我心里...”亦或者“也許未來遙遠在光年之外壹置,我愿守候未知里為你等待...”竞思,成了大家閑時在嘴邊哼唱的調(diào)調(diào)。那么钞护,有沒有想過將這些好聽的剪輯批量下載下來呢盖喷?

python鏈接抖音

python下載抖音內(nèi)容的帖子網(wǎng)上有一些,但都比較麻煩患亿,需要通過adb連接安卓手機后传蹈,模擬操作。我這么懶步藕,這種事兒玩不來...那么惦界,該如何獲取抖音內(nèi)容呢?網(wǎng)上搜了下大概有兩種方式咙冗,一個是瀏覽器插件快抖沾歪,另外一個是我今天要說的抖音網(wǎng)頁版。其實這兩者差別不是很大雾消,都是先將抖音內(nèi)容下載至服務(wù)器后灾搏,通過開發(fā)簡單網(wǎng)站配置域名后挫望,讓大家訪問。讓我們來看看抖音網(wǎng)頁版:

抖音網(wǎng)頁版

哎喲吼狂窑,居然看到了昨天爬蟲的“喬奶奶”...當然今天的重點不是視頻媳板,而是下載它全站所有的音樂!當然看過了今天的文章泉哈,你使用同樣的方式蛉幸,簡單改幾行代碼,就可以爬它全站的視頻了...

爬蟲實現(xiàn)分析
熱歌榜內(nèi)容
抖音熱歌榜

大家先開看看這個抖音熱歌榜歌曲丛晦,每頁20首歌曲奕纫,一個55頁。但細不細心大家都能發(fā)現(xiàn)烫沙,很多歌曲存在重復(fù)的問題匹层。所以,等下爬蟲的時候锌蓄,我們需要先準備一個music_list,用來識別這首歌曲是否已經(jīng)下載過了...

網(wǎng)頁解析
網(wǎng)頁分析

網(wǎng)頁比較簡單升筏,一個div中包裹了一個ul>li*20,我們是不是該這樣獲取:

soup.find('div',{"class":"pull-left"}).find('ul').findAll('a')

如果你說是煤率,那么一定沒有好好看我前天整理的文章通過哪吒豆瓣影評仰冠,帶你分析python爬蟲快速入門:http://www.reibang.com/p/ae38f7607902,我在文章中專門提到了一個小技巧蝶糯,通過使用attr的屬性進行快速解析洋只,那么最快速的獲取方式是:
soup.findAll('a', attrs={'onclick': True})
我們只需要獲取所有的a標簽,切這些標簽中包含onclick這個屬性即可昼捍。

巧用eval

我們解析到的內(nèi)容通過attr['onclick'],可以得到他的屬性open1('夜','http://p9-dy.byteimg.com/obj/61a20007a98954b0831d','')识虚,如何能快速獲取歌曲名字和url呢?這里我們需要用到一個eval的小技巧:

index = "open1('夜','http://p9-dy.byteimg.com/obj/61a20007a98954b0831d','')"
index[5:]
"('夜','http://p9-dy.byteimg.com/obj/61a20007a98954b0831d','')"
index_tuple = eval(index[5:])
print(index_tuple, type(index_tuple))
('夜', 'http://p9-dy.byteimg.com/obj/61a20007a98954b0831d', '') <class 'tuple'>
index_tuple[0]
'夜'
index_tuple[1]
'http://p9-dy.byteimg.com/obj/61a20007a98954b0831d'

ps:今天一個朋友說我寫代碼沒注釋妒茬,我這是現(xiàn)身說法的告訴你担锤,如何能寫出讓別人壓根看不懂的代碼,就是不寫注釋啊乍钻,哈哈肛循!
其實,代碼我都在文章中一點一點的講解了银择,所以沒有寫多糠,但秉承著害怕大佬們?nèi)£P(guān)的心態(tài),我還是把注釋加上吧...

代碼實現(xiàn)

總體來說實現(xiàn)比較簡單浩考,全部代碼如下:

# -*- coding: utf-8 -*-
# @Author   : 王翔
# @JianShu  : 清風Python
# @Date     : 2019/7/31 23:25
# @Software : PyCharm
# @version  :Python 3.7.3
# @File     : DouYinMusic.py

import os
import requests
from bs4 import BeautifulSoup
import threading
import time


class DouYinMusic:
    def __init__(self):
        self.music_list = []
        self.path = self.download_path()

    @staticmethod
    def download_path():
        """
        獲取代碼執(zhí)行目錄夹孔,并在目錄下創(chuàng)建Music文件夾
        :return Music文件夾全路徑
        """
        base_dir = os.path.dirname(os.path.abspath(__file__))
        _path = os.path.join(base_dir, "Music")
        if not os.path.exists(_path):
            os.mkdir(_path)
        return _path

    def get_request(self, url):
        """
        封裝requests.get方法
        如果為網(wǎng)頁請求,返回網(wǎng)頁內(nèi)容
        否則,解析音樂地址搭伤,并返回音樂二進制文件
        :param url: 請求url(分網(wǎng)頁只怎、音樂兩類)
        :return: 網(wǎng)頁內(nèi)容 & 音樂二進制文件
        """
        r = requests.get(url, timeout=5)
        if url.endswith('html'):
            return r.text
        else:
            return r.content

    def analysis_html(self, html):
        """
        根據(jù)獲取的網(wǎng)頁內(nèi)容,解析音樂名稱怜俐、下載地址
        調(diào)用音樂下載方法
        :param html: 網(wǎng)頁內(nèi)容
        """
        soup = BeautifulSoup(html, 'lxml')
        # 根據(jù)關(guān)鍵字onclick查找每個下載地址
        for tag_a in soup.findAll('a', attrs={'onclick': True}):
            # 下載格式'("name","link","")',通過eval將str轉(zhuǎn)化為tuple類型
            link_list = eval(tag_a['onclick'][5:])
            music_name, music_link = link_list[:2]
            # 因為存在部分重復(fù)音樂身堡,故設(shè)置判斷下載過的音樂跳過
            if music_name in self.music_list:
                continue
            self.music_list.append(music_name)
            t = threading.Thread(target=self.download_music, args=(music_name, music_link))
            time.sleep(0.5)
            t.start()

    def download_music(self, music_name, music_link):
        """
        解析音樂文件,完成音樂下載
        :param music_name: 音樂名稱
        :param music_link: 下載地址
        """
        _full_name = os.path.join(self.path, music_name)
        with open(_full_name + '.mp3', 'wb') as f:
            f.write(self.get_request(music_link))
        print("抖音音樂: {} 下載完成".format(music_name))

    def run(self):
        """
        主方法,用于批量生成url
        """
        for page in range(1,55):
            url = "http://douyin.bm8.com.cn/t_{}.html".format(page)
            html = self.get_request(url)
            self.analysis_html(html)


if __name__ == '__main__':
    main = DouYinMusic()
    main.run()

來讓我們看看效果吧:


抖音音樂下載.gif

網(wǎng)站是通過nginx負載均衡搭建的佑菩,有一些鏈接已經(jīng)失效了盾沫。最終下載了不重復(fù)的592首抖音音樂裁赠。


音樂下載內(nèi)容

同樣的殿漠,大家喜歡可以按照這種方法,嘗試下載一下網(wǎng)站的抖音視頻佩捞。
The End

OK,今天的內(nèi)容就到這里绞幌,如果覺得內(nèi)容對你有所幫助,歡迎點擊文章右下角的“在看”一忱。
代碼與下載好的音樂莲蜘,如果大家喜歡,公眾號回復(fù)抖音音樂即可獲取百度云下載鏈接帘营。
期待你關(guān)注我的公眾號清風Python票渠,如果覺得不錯,希望能動動手指轉(zhuǎn)發(fā)給你身邊的朋友們芬迄。
希望每周一至五清晨的7點10分问顷,都能讓清風Python的知識文章叫醒大家!謝謝……

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末禀梳,一起剝皮案震驚了整個濱河市杜窄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌算途,老刑警劉巖塞耕,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異嘴瓤,居然都是意外死亡扫外,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門廓脆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來筛谚,“玉大人,你說我怎么就攤上這事狞贱】袒瘢” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蝎毡。 經(jīng)常有香客問我厚柳,道長,這世上最難降的妖魔是什么沐兵? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任别垮,我火速辦了婚禮,結(jié)果婚禮上扎谎,老公的妹妹穿的比我還像新娘碳想。我一直安慰自己,他們只是感情好毁靶,可當我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布胧奔。 她就那樣靜靜地躺著,像睡著了一般预吆。 火紅的嫁衣襯著肌膚如雪龙填。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天拐叉,我揣著相機與錄音岩遗,去河邊找鬼。 笑死凤瘦,一個胖子當著我的面吹牛宿礁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蔬芥,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼梆靖,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了坝茎?” 一聲冷哼從身側(cè)響起涤姊,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嗤放,沒想到半個月后思喊,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡次酌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年恨课,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片岳服。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡剂公,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出吊宋,到底是詐尸還是另有隱情纲辽,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站拖吼,受9級特大地震影響鳞上,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜吊档,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一篙议、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧怠硼,春花似錦鬼贱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至增显,卻和暖如春雁佳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背同云。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留堵腹,地道東北人炸站。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像疚顷,于是被迫代替她去往敵國和親旱易。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容