1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        爬取網(wǎng)易云音樂(lè)每日推薦歌單,然后定時(shí)自動(dòng)發(fā)送到朋友郵箱

        共 3797字,需瀏覽 8分鐘

         ·

        2022-01-02 15:41

        點(diǎn)擊上方藍(lán)色字體,關(guān)注程序員zhenguo


        你好,我是 zhenguo
        這是我的第493篇原創(chuàng)
        今天是我的第三個(gè)Python項(xiàng)目:每天自動(dòng)定時(shí)、自動(dòng)發(fā)送爬取的網(wǎng)易云音樂(lè)的推薦歌單到你的郵箱列表中。
        前兩個(gè)項(xiàng)目:
        我的第一個(gè)Python實(shí)用項(xiàng)目,來(lái)了!
        我的第二個(gè)Python趣味項(xiàng)目,來(lái)了!
        因?yàn)槟甑琢斯ぷ髅?,只能抽取每天碎片時(shí)間,這個(gè)項(xiàng)目我前前后后加起來(lái)準(zhǔn)備了近一周,希望真正幫助到你。
        下面1-6是爬蟲(chóng)的前端基本操作,我言簡(jiǎn)意賅的表述如下:

        1 打開(kāi)網(wǎng)址

        https://music.163.com/

        2 點(diǎn)擊 發(fā)現(xiàn)音樂(lè)--推薦

        3 在此網(wǎng)頁(yè),右鍵,按下檢查

        4 點(diǎn)擊 Network

        5 在第一個(gè)紅框內(nèi)輸入:recommand 過(guò)濾得到API

        進(jìn)而找到推薦歌曲的API:

        https://music.163.com/weapi/discovery/recommend/resource?csrf_token=

        且是POST請(qǐng)求

        并且在Request Headerscookie鍵中能夠找到csrf_token的取值,如下圖中的紅框所示:

        與代碼實(shí)際獲取的稍有出路:

        這是代碼獲取到的:

        8e504c23c925ac6b1a9f8570bd5ea25899dcb9d14e06692fe82562bbf8998e10db7e765df03701e5d88f396e7092517fd69973145faab799d78b6050a17a35e7a47070bb71cca15c2d96587bb7c51858?for?.music.163.com/>,?00OfaG13kwU00MTt0ZEkt1FAzgBBlEAAAF-Bs4AAA?for?.music.163.com/>,?13b3d714dab6aefe645de1f994416da6?for?.music.163.com/>,?for?.music.163.com/>,?1446513182120?for?.music.163.com/api/clientlog>,?1446513246949?for?.music.163.com/api/clientlog>,?1446513182120?for?.music.163.com/api/feedback>,?1446513246949?for?.music.163.com/api/feedback>,?1446513182120?for?.music.163.com/eapi/clientlog>,?1446513246949?for?.music.163.com/eapi/clientlog>,?1446513182120?for?.music.163.com/eapi/feedback>,?1446513246949?for?.music.163.com/eapi/feedback>,?1446513182120?for?.music.163.com/neapi/clientlog>,?1446513246949?for?.music.163.com/neapi/clientlog>,?1446513182120?for?.music.163.com/neapi/feedback>,?1446513246949?for?.music.163.com/neapi/feedback>,?1446513182120?for?.music.163.com/openapi/clientlog>,?1446513246949?for?.music.163.com/openapi/clientlog>,?1446513182120?for?.music.163.com/wapi/clientlog>,?1446513246949?for?.music.163.com/wapi/clientlog>,?1446513182120?for?.music.163.com/wapi/feedback>,?1446513246949?for?.music.163.com/wapi/feedback>,?1446513182120?for?.music.163.com/weapi/clientlog>,?1446513246949?for?.music.163.com/weapi/clientlog>,?1446513182120?for?.music.163.com/weapi/feedback>,?1446513246949?for?.music.163.com/weapi/feedback>]>

        以代碼為準(zhǔn),使用正則提?。?/p>

        re.findall('__csrf=(.*?)?for',?str(self.session.cookies))[0]

        6 user-agent

        也是在Request Headers部分中,可以獲取到:

        下面進(jìn)入到代碼開(kāi)發(fā)部分

        環(huán)境安裝

        定時(shí)、自動(dòng)爬取網(wǎng)易今日推薦歌單,并自動(dòng)發(fā)送郵件。

        內(nèi)置模塊,如下:

        import?time
        import?re
        import?smtplib
        from?email?import?header
        from?email.mime?import?text,?multipart
        from?threading?import?Timer

        其中,timere模塊都很常見(jiàn)。后面三行smtplibemail都與自動(dòng)發(fā)郵件相關(guān)。

        下面這幾個(gè)包是重點(diǎn),其中第一個(gè)包是公眾號(hào)朋友皮卡丘編寫(xiě),用于模擬自動(dòng)登入常見(jiàn)各大平臺(tái),用起來(lái)很方便。

        第二個(gè)包也是皮卡丘編寫(xiě),用于自動(dòng)爬取網(wǎng)易云音樂(lè)。我看了其中的主要模塊,編寫(xiě)的很不錯(cuò)。

        第三個(gè)包是用來(lái)寫(xiě)命令行接口,很方便。

        from?DecryptLogin?import?login
        from?DecryptLogin.core.music163?import?Cracker
        import?click

        項(xiàng)目框架

        首先,看下項(xiàng)目文件,主要包括以下兩個(gè):

        p3_email_song.py

        song_email.txt

        其中,py為代碼模塊,txt為py模塊需要讀入的郵箱列表,表示爬取后自動(dòng)發(fā)給這些郵箱。

        下面,看下py模塊的主要類(lèi)和函數(shù)。

        如上提到的,全局變量headers字典是post請(qǐng)求的頭,從瀏覽器里復(fù)制過(guò)來(lái):

        headers?=?{
        ????'User-Agent':?'Mozilla/5.0?(Windows?NT?10.0;?Win64;?x64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/79.0.3945.130?Safari/537.36',
        ????'Accept':?'*/*'
        }

        接下來(lái),全局變量send_email_interval是定時(shí)自動(dòng)發(fā)送郵件的時(shí)間間隔,設(shè)置為一天,意思是每一天定時(shí)發(fā)送:

        send_email_interval?=?60*60*24

        主要包括一個(gè)類(lèi):NetRcmndSong,用于自動(dòng)爬取網(wǎng)易云音樂(lè)的推薦歌單,cmd函數(shù)是使用click模塊裝飾的命令行接口:

        NetRcmndSong類(lèi)

        主方法是run

        ????def?run(self):
        ????????recommend_info?=?self.__get_recommend()
        ????????keys,?values?=?list(recommend_info.keys()),?list(recommend_info.values())
        ????????self.title?=?f'【程序員zhenguo】和網(wǎng)易云音樂(lè)今日為你({self.username})推薦的歌曲如下:'
        ????????options?=?[v?for?v?in?values]
        ????????self.email_content?=?self.title?+?"\n"?+?'\n'.join(options)?+?"\n\n\t來(lái)自你的老朋友\n\t程序員zhenguo"
        ????????print(self.email_content)
        ????????
        ????????self.__send_email()

        self.__get_recommend()用于爬取歌單數(shù)據(jù),后面解析成郵件發(fā)送的格式,這是我今天爬取的推薦歌單,一共74首,下面是前20首歌:

        【程序員zhenguo】和網(wǎng)易云音樂(lè)今日為你([email protected])推薦的歌曲如下:
        0?夢(mèng)一場(chǎng)-小葉同學(xué)
        1?Something?Just?Like?This-We?Rabbitz
        2?側(cè)臉-于果
        3?我們的時(shí)光-趙雷
        4?余生浮梁-侃侃
        5?第三極-十月時(shí)Sunset
        6?無(wú)感-王朝
        7?逆流時(shí)光-安圖聲樂(lè)隊(duì)
        8?多幸運(yùn)遇見(jiàn)你-李樂(lè)樂(lè)
        9?夢(mèng)に向かって-中村由利子
        10?直到遇見(jiàn)了你,我只喜歡你-陳柯宇
        11?萬(wàn)萬(wàn)里-史超
        12?Forrest?Gump-David?Metis
        13?董小姐(小調(diào)版)-張超洋
        14?S??Thanh?Hoa(Remix)-SHENMING
        15?一生中最?lèi)?ài)?(Live)-李克勤
        16?Tojana-Willyam?Wiay
        17?一言難盡-張宇
        18?你-劉健宗
        19?求佛南方凱-白風(fēng)流
        20?我曾-楊騎瑞

        ?來(lái)自你的老朋友
        ?程序員zhenguo

        __get_recommend是整個(gè)項(xiàng)目的核心,通過(guò)文章一開(kāi)始的講解,我們知道API是下面的url

        ????def?__get_recommend(self):
        ????????"""
        ????????獲得每日歌曲推薦
        ????????:return:
        ????????"""

        ????????url?=?'http://music.163.com/weapi/v2/discovery/recommend/songs?csrf_token='
        ????????data?=?{
        ????????????'crsf_token':?self.csrf,
        ????????????'limit':?'999',
        ????????????'offset':?'0',
        ????????????'total':?'true'
        ????????}
        ????????data?=?self.cracker.get(data)
        ????????response?=?self.session.post(url,?headers=self.headers,?data=data)
        ????????response_json?=?response.json()

        你一定會(huì)好奇:data的結(jié)構(gòu)為啥是這樣,這是通過(guò)解析網(wǎng)易云前端的js代碼得到的。

        最重量級(jí)的、最核心的應(yīng)該是下面這行代碼:

        self.cracker.get(data)

        這里面都有源碼,大家可以結(jié)合網(wǎng)易云前端的js代碼,再學(xué)習(xí)RSAAES的加密技術(shù),相信理解沒(méi)問(wèn)題。

        cmd方法

        click模塊封裝命令行接口是真的方便,只需要使用下面三個(gè)裝飾器:

        @click.command()
        @click.option('-u',?help='用戶(hù)名')
        @click.option('-p',?help='密碼')
        def?cmd(u,?p):
        ????client?=?NetRcmndSong(u,?p)
        ????client.run()
        ????Timer(send_email_interval,?cmd).start()

        另外,應(yīng)為我們想每天定時(shí)自動(dòng)發(fā)送,所以使用Timer做定時(shí)任務(wù)。只需要下面一行代碼,還是有點(diǎn)巧妙,cmd函數(shù)必須包括下面這行代碼,同時(shí)Timer的參數(shù)也必須叫cmd

        Timer(send_email_interval,?cmd()).start()

        測(cè)試

        下面應(yīng)用上面的模塊,實(shí)現(xiàn)定時(shí)、自動(dòng)爬取并發(fā)送郵件。

        song_email.txt文件中配置接收推薦音樂(lè)的郵箱,一行一個(gè),可以給你女朋友、好朋友、家人的郵箱都寫(xiě)上。

        然后在cmd或terminal窗口,只需輸入下面一行代碼:

        python?p3_email_song.py?-u?你的網(wǎng)易云賬戶(hù)?-p?你的網(wǎng)易密碼

        這是我收到的郵件截圖:

        完整代碼下載

        上面完整py代碼文件,在我的公眾號(hào)后臺(tái)回復(fù):c,即可下載

        同時(shí)過(guò)往或后面的Python項(xiàng)目代碼,我也會(huì)同步到這個(gè)文件夾中。

        長(zhǎng)按關(guān)注,回復(fù)c

        不用打賞,點(diǎn)個(gè)贊或在看

        就心滿意足了

        zhenguo原創(chuàng)精華PDF,傾情奉獻(xiàn)給你,后臺(tái)回復(fù)對(duì)應(yīng)關(guān)鍵詞下載
        ??Python專(zhuān)題?|?數(shù)據(jù)分析手冊(cè)?|?算法刷題100
        瀏覽 171
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            大鸡巴操逼网站 | 狠狠狠狠狠狠干 | 无码人妻久久久久一区二区三区91 | 成人国产片女人爽到高潮 | 国产日产久久高清欧美一区 | 国产自产56区91 | 我被两个男人躁了一天小说 | 爱情岛成人网站 | 久久99精品久久久久久秒播九色 | 你懂的网址在线观看 |