1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
      Python進(jìn)行爬取酷狗音樂的方法

      小編給大家分享一下Python進(jìn)行爬取酷狗音樂的方法,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

      陽泉網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)建站于2013年創(chuàng)立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站

      功能概述

      讓用戶輸入要搜索的音樂名,然后把所有的音樂以及每一個(gè)音樂對(duì)應(yīng)的信息展示給用戶。再詢問用戶要不要下載任何音樂,如果要,則讓用戶輸入音樂對(duì)應(yīng)的id號(hào)來下載(支持批量下載)。

      找出思路

      首先,在獲取多首歌曲的信息和下載地址之前,我們需要知道如何獲取一首歌的下載地址。

      打開www.kugou.com ,在搜索欄里輸入你想要查找的歌曲名。按下回車。切換網(wǎng)頁之后,點(diǎn)進(jìn)一首歌曲的播放頁。按下F12,調(diào)出開發(fā)者工具。選擇network,然后點(diǎn)all。可以看到,目前是沒有任何東西顯示的。因?yàn)樗械奈募呀?jīng)在你打開開發(fā)者工具的時(shí)候加載完了,此時(shí)此刻,你只需要F5刷新一下網(wǎng)頁。好了,現(xiàn)在

      你就能看到類似這樣的頁面。

      Python進(jìn)行爬取酷狗音樂的方法

      可以看到什么js文件啊,png文件啊,音頻文件啊,都沒有!因?yàn)槲覀冊(cè)谡{(diào)出開發(fā)者工具之前,網(wǎng)站已經(jīng)加載完了文件,這個(gè)時(shí)候,我們只需要按下F5刷新一下網(wǎng)站。好了,所有的文件加載出來了。進(jìn)入到一個(gè)叫做index.php?的文件,然后進(jìn)入到這個(gè)文件的地址。

      Python進(jìn)行爬取酷狗音樂的方法

      進(jìn)入這個(gè)文件地址之后,這實(shí)際上就是音樂的信息(為了方便,我在文章后面就說是信息地址)。我們還可以看到一個(gè)叫play_url的東西,這個(gè)play_url就是音頻的mp3文件地址,可以看到,這些play_url都是把/變成了/。我們不用擔(dān)心這個(gè),因?yàn)榫W(wǎng)址輸入欄會(huì)自動(dòng)幫我們調(diào)整成/,但是在用代碼實(shí)現(xiàn)爬蟲的時(shí)候,我們就需要把/變成/了。但短時(shí)間內(nèi),我們先不用管這個(gè)。讓我們進(jìn)入到這個(gè)網(wǎng)址,咦?這不是我們剛剛播放的音樂嗎?

      Python進(jìn)行爬取酷狗音樂的方法

      成功之后,我們就有了更大的信心和思路去爬蟲。我們只要把每首歌曲的信息地址找出來,然后用正則表達(dá)式把每首歌曲的信息和音樂地址獲取出來。再一次用爬蟲獲取到音樂的二進(jìn)制編碼,保存在本地。

      那我們?nèi)绾潍@取每首歌的信息地址呢?通過拼接地址!讓我們看這兩首歌的url有啥不同,你就知道了。

      Faded - https://wwwapi.kugou.com/yy/i...

      卡路里 - https://wwwapi.kugou.com/yy/i...

      可以看到除了hash值以外的東西,就沒有啥區(qū)別了。也就是說我們只需要通過 https://wwwapi.kugou.com/yy/i...

      來拼接每首歌的信息地址就行了。那歌曲的hash要去那里找呢?回到酷狗的音樂搜索欄,隨便搜一首歌按下回車。可以看到這里有好多首歌。F12-NETWORK-ALL-F5,我們找出一個(gè)這樣的文件。

      Python進(jìn)行爬取酷狗音樂的方法

      我們進(jìn)入這個(gè)網(wǎng)址,就可以看到剛剛所有歌曲的hash。那問題又來了,我們又要怎樣獲取到這個(gè)hash信息網(wǎng)址呢?這個(gè)太簡(jiǎn)單了,只需要通過 https://songsearch.kugou.com/...

      拼接網(wǎng)址就行。

      這個(gè)搜索的歌曲名,我們代碼用input讓用戶輸入歌曲名就行了。那么,你找到思路了嗎?

      思路:拼接出hash信息網(wǎng)址,正則表達(dá)式獲取到所有歌曲的hash,再拼接出單首歌曲的url。最后再一次用正則表達(dá)式獲取歌曲的play_url即可。

      開始寫代碼

      首先導(dǎo)入我們的requests和re正則表達(dá)式庫。re用來找出音樂的信息和下載地址,requests負(fù)責(zé)獲取文本和下載音樂。

      import requestsimport re

      我們還要設(shè)置一些變量,這些變量在后面可是會(huì)派上大用場(chǎng)的。

      timer = 0song_urls = {}names = {}

      我們不是要拼接出多首歌曲的信息網(wǎng)址嗎?那我們就先要讓用戶輸入歌曲名。接著再拼。

      songs = input("請(qǐng)輸入歌曲名:")
      url = 'https://songsearch.kugou.com/song_search_v2?callback=jQuery112409090559630919017_1585358668138&keyword=%s&page=1&pagesize=30&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_filter=0&_=1585358668140'%songs

      現(xiàn)在,我們就可以用requests請(qǐng)求文本了!由于這個(gè)網(wǎng)址是get請(qǐng)求的而且我們請(qǐng)求的是文本,所以,我們也要用方法requests.get().text方法。

      texts = requests.get(url).text

      接著,你可以試著打印一下文本。打印出來的文本和我們拼接的網(wǎng)址的內(nèi)容毫無區(qū)別(我這里就不打印了,等下python卡死就完了)

      在這些文本里,我們可以獲取到每首歌的hash值。用正則表達(dá)式查找就行了。

      song_hashes = re.findall('"FileHash":"(.*?)"',texts)

      打印一下song_hashes,可以看到,他是個(gè)列表。所以我們要進(jìn)行for遍歷。

      for i in song_hashes:
         information_url = 'https://wwwapi.kugou.com/yy/index.php?r=play/getdata&callback=jQuery19104610954889760035_1585364074033&hash=%s&album_id=0&dfid=2SSGs60RKO9P0bAzIe0xF4Us∣=5a959954d2f99fc1438fe2efb7596511&platid=4&_=1585364074034'%i
         information = requests.get(information_url).text
         song_url = re.findall('"play_url":"(.*?)"',information)
         song_names = bytes(re.findall('"audio_name":"(.*?)"',information)[0],encoding='ascii').decode('unicode-escape')
         singers = bytes(re.findall('"author_name":"(.*?)"',information)[0],encoding='ascii').decode('unicode-escape')    if song_names not in names.values():
             names[str(timer)] = song_names        print("%d.%s"%(timer,song_names))        print("作者:%s"%singers)        print()
             timer += 1    if song_url[0] not in song_urls.values():
             song_urls[str(timer-1)] = song_url[0]

      上段代碼中,我們進(jìn)行了每個(gè)hash的拼接操作,然后我們?cè)趶膯问赘枨男畔⑽谋纠镎业搅艘魳访妥髡吆拖螺d地址。由于音樂名和作者是進(jìn)行ascii編碼過的,所以我們也要進(jìn)行一個(gè)解碼。由于歌曲名和歌手有時(shí)候會(huì)重復(fù)打印,所以我們每一次打印音樂和作者之前,都會(huì)把音樂和作者名加入到一個(gè)字典。每一次打印都會(huì)進(jìn)行一次是否存在字典的判斷。字典的key就由我們的timer變量的變化進(jìn)行改變key名。另外,我們還把每首歌的下載地址保存到了song_urls字典里。

      打印了音樂信息之后,就要詢問用戶要下載那首歌了。

      print('輸入n就不下載,若要下載多首歌曲,請(qǐng)用英文符號(hào)","隔開')
      choice = input('請(qǐng)輸入要下載歌曲的編號(hào):').split(',')if choice == "n":    exit()else:
          path = input("請(qǐng)輸入要保存的路徑:")    for i in choice:
              song_url = song_urls[i].replace('\\/','/')
              song = requests.get(song_url).content
              save_name = names[i]
              with open(path + '/' + save_name + '.mp3','wb') as f:
                  f.write(song)
          print("保存完成!")

      按以前的做法,用requests.get().content把音樂轉(zhuǎn)換成二進(jìn)制文件再進(jìn)行保存。在get之前,我們還需要把網(wǎng)址的亂七八糟的\/變成/。之后,就能保存下來了!

      我們就拿一首叫做the day you went away的歌試一下

      代碼實(shí)現(xiàn)效果:

      Python進(jìn)行爬取酷狗音樂的方法

      程序的不足

      酷狗每隔一段時(shí)間都會(huì)弄個(gè)滑動(dòng)驗(yàn)證碼,這個(gè)時(shí)候我們的程序就不能獲取到數(shù)據(jù)。這種情況,用selenium就可以輕松解決。

      完整代碼:

      #導(dǎo)入庫
      import requests
      import re
      import os
      #設(shè)置好一些變量
      timer = 0 #設(shè)置一個(gè)計(jì)算歌曲順序的機(jī)器
      song_urls = {}
      names = {}
      songs = input("請(qǐng)輸入歌曲名:")
      url = 'https://songsearch.kugou.com/song_search_v2?callback=jQuery112409090559630919017_1585358668138&keyword=%s&page=1&pagesize=30&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_filter=0&_=1585358668140'%songs
      texts = requests.get(url).text
      song_hashes = re.findall('"FileHash":"(.*?)"',texts)print("請(qǐng)稍等...")for i in song_hashes:
          information_url = 'https://wwwapi.kugou.com/yy/index.php?r=play/getdata&callback=jQuery19104610954889760035_1585364074033&hash=%s&album_id=0&dfid=2SSGs60RKO9P0bAzIe0xF4Us∣=5a959954d2f99fc1438fe2efb7596511&platid=4&_=1585364074034'%i
          information = requests.get(information_url).text
          song_url = re.findall('"play_url":"(.*?)"',information)
          song_names = bytes(re.findall('"audio_name":"(.*?)"',information)[0],encoding='ascii').decode('unicode-escape')
          singers = bytes(re.findall('"author_name":"(.*?)"',information)[0],encoding='ascii').decode('unicode-escape')    if song_names not in names.values():
              names[str(timer)] = song_names        print("%d.%s"%(timer,song_names))        print("作者:%s"%singers)        print()
              timer += 1    if song_url[0] not in song_urls.values():
              song_urls[str(timer-1)] = song_url[0]print('輸入n就不下載,若要下載多首歌曲,請(qǐng)用英文符號(hào)","隔開')
      choice = input('請(qǐng)輸入要下載歌曲的編號(hào):').split(',')if choice == "n":    exit()else:
          path = input("請(qǐng)輸入要保存的路徑:")
          has_path = os.path.exists(path)    while has_path == False:        print("路徑不存在!!")
              path = input("請(qǐng)輸入要保存的路徑:")
              has_path = os.path.exists(path)    for i in choice:
              song_url = song_urls[i].replace('\\/','/')
              song = requests.get(song_url).content
              save_name = names[i]
              with open(path + '/' + save_name + '.mp3','wb') as f:            f.write(song)    print("保存完成!")

      看完了這篇文章,相信你對(duì)Python進(jìn)行爬取酷狗音樂的方法有了一定的了解,想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!


      文章題目:Python進(jìn)行爬取酷狗音樂的方法
      URL標(biāo)題:http://www.ef60e0e.cn/article/geipcp.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        墨江| 南川市| 沂水县| 砀山县| 和平县| 凤凰县| 龙岩市| 常山县| 唐河县| 泾川县| 合作市| 鲁山县| 寿光市| 民权县| 澄城县| 永寿县| 邵东县| 宜兰市| 巢湖市| 深泽县| 贵州省| 定州市| 辉南县| 湟中县| 宜州市| 奉化市| 泾川县| 太保市| 阳春市| 晋宁县| 辰溪县| 子洲县| 莱州市| 七台河市| 武义县| 南昌市| 明溪县| 凉城县| 贵溪市| 瓦房店市| 商洛市|