亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python爬蟲幫你打包下載所有抖音好聽的背景音樂,還不快收藏一起聽歌

系統 1860 0

不知道什么時候開始,中國出現了南抖音、北快手的互文格局(東市買駿馬,西市買鞍韉…)。剛才提到了,之前比較喜歡刷抖音,對于我這種佛系程序猿,看網上這些整容妹子基本一個樣。喜歡抖音主要是兩個初衷,學做菜聽音樂。朋友之前常說,人家抖音看妹子看的樂呵呵,你看人家做菜也能津津有味,一個人在那兒傻笑…民以食為天,我看到色香味俱全的菜,做的那么好吃的樂呵樂呵還不行么。

抖音捧紅了很多人,也讓很多本不怎么讓大家熟知的歌曲、BGM,經過翻唱、混剪與視頻搭配,從而傳播大街小巷。什么“若不是你,突然闖進我心里…”亦或者“也許未來遙遠在光年之外,我愿守候未知里為你等待…”,成了大家閑時在嘴邊哼唱的調調。那么,有沒有想過將這些好聽的剪輯批量下載下來呢?

python鏈接抖音

python下載抖音內容的帖子網上有一些,但都比較麻煩,需要通過adb連接安卓手機后,模擬操作。我這么懶,這種事兒玩不來…那么,該如何獲取抖音內容呢?網上搜了下大概有兩種方式,一個是瀏覽器插件快抖,另外一個是我今天要說的抖音網頁版。其實這兩者差別不是很大,都是先將抖音內容下載至服務器后,通過開發簡單網站配置域名后,讓大家訪問。讓我們來看看抖音網頁版:

Python爬蟲幫你打包下載所有抖音好聽的背景音樂,還不快收藏一起聽歌_第1張圖片

哎喲吼,居然看到了昨天爬蟲的“喬奶奶”…當然今天的重點不是視頻,而是下載它全站所有的音樂!

爬蟲實現分析

熱歌榜內容

Python爬蟲幫你打包下載所有抖音好聽的背景音樂,還不快收藏一起聽歌_第2張圖片

大家先開看看這個抖音熱歌榜歌曲,每頁20首歌曲,一個55頁。但細不細心大家都能發現,很多歌曲存在重復的問題。所以,等下爬蟲的時候,我們需要先準備一個music_list,用來識別這首歌曲是否已經下載過了…

網頁解析

Python爬蟲幫你打包下載所有抖音好聽的背景音樂,還不快收藏一起聽歌_第3張圖片

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

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

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

巧用eval

我們解析到的內容通過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', '') 
              
                
index_tuple[0]
'夜'
index_tuple[1]
'http://p9-dy.byteimg.com/obj/61a20007a98954b0831d'
              
            
          

ps:今天一個朋友說我寫代碼沒注釋,我這是現身說法的告訴你,如何能寫出讓別人壓根看不懂的代碼,就是不寫注釋啊,哈哈!
其實,代碼我都在文章中一點一點的講解了,所以沒有寫,但秉承著害怕大佬們取關的心態,我還是把注釋加上吧…

代碼實現

總體來說實現比較簡單,全部代碼如下:

            
              # -*- 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():
        """
        獲取代碼執行目錄,并在目錄下創建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方法
        如果為網頁請求,返回網頁內容
        否則,解析音樂地址,并返回音樂二進制文件
        :param url: 請求url(分網頁、音樂兩類)
        :return: 網頁內容 & 音樂二進制文件
        """
        r = requests.get(url, timeout=5)
        if url.endswith('html'):
            return r.text
        else:
            return r.content

    def analysis_html(self, html):
        """
        根據獲取的網頁內容,解析音樂名稱、下載地址
        調用音樂下載方法
        :param html: 網頁內容
        """
        soup = BeautifulSoup(html, 'lxml')
        # 根據關鍵字onclick查找每個下載地址
        for tag_a in soup.findAll('a', attrs={'onclick': True}):
            # 下載格式'("name","link","")',通過eval將str轉化為tuple類型
            link_list = eval(tag_a['onclick'][5:])
            music_name, music_link = link_list[:2]
            # 因為存在部分重復音樂,故設置判斷下載過的音樂跳過
            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()
            
          

來讓我們看看效果吧:

網站是通過nginx負載均衡搭建的,有一些鏈接已經失效了。最終下載了不重復的592首抖音音樂。

同樣的,大家喜歡可以按照這種方法,嘗試下載一下網站的抖音視頻。

The End

OK,今天的內容就到這里,如果覺得內容對你有所幫助,歡迎點擊文章右下角的“在看”。
代碼與下載好的音樂,如果大家喜歡,公眾號回復 抖音音樂 即可獲取百度云下載鏈接。
期待你關注我的公眾號 清風Python ,如果覺得不錯,希望能動動手指轉發給你身邊的朋友們。

作者:清風Python


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 深夜网站在线观看 | 欧美一区二区三区播放 | 免费视频毛片 | 一区二区三区毛片免费 | 日韩在线一 | 免费日韩毛片 | 国产精品小视频在线观看 | 非洲一级毛片 | 国产欧美精品午夜在线播放 | 亚洲精品久久九九热 | 国产四虎免费精品视频 | 国产毛片女人18水多 | 91福利免费| 免费看一级欧美毛片 | 国内久久久久影院精品 | 婷婷综合激情 | 成人区精品一区二区不卡亚洲 | 亚洲在线小视频 | 51啪影院 | 一级女人毛片 | 亚洲综合成人网 | 97影院理论在线观看 | 亚洲精品第一区二区在线 | 久久久国产精品免费视频 | 黄wwwwww | 欧美天天影院 | 一级特黄性色生活片 | 青青青青啪视频在线观看 | 女人隐私秘视频黄www免费 | 97在线视| 久久影片 | 中文字幕日韩在线观看 | 一本色道久久综合亚洲精品高清 | 久久天天躁狠狠躁夜夜爽蜜月 | 日日射天天射 | 91粉嫩萝控精品福利网站 | 欧美日日| 中文字幕一区二区三区四区 | 来自深渊在线观看 | 免费观看一级特黄欧美大片 | 91在线免费视频观看 |