Python網絡爬蟲與信息提取(12)—— 爬蟲批量搜索音樂並下載模擬request請求

前言

之前模擬的是登陸瀏覽器獲取url爬取音樂地址下載,同學改了個模擬request請求的獲取下載地址,效果好多了。

代碼

import requests
import json
import sys
import re


class MusicSpiwer:
    def __init__(self, music, direction="D://KuGou//"):
        self.music = music
        self.direction = direction
        self.dataSource = ["netease", "kugou", "xiami"]
        self.sourceIndex = 0

    def getMusicId(self):
        musicId = None
        for i in range(self.dataSource.__len__()):
            try:
                data = {"types": "search", "count": 20, "source": self.dataSource[i], "name": self.music}
                response = requests.post(
                    url="http://www.gequdaquan.net/gqss/api.php?callback=jQuery111307203118624950957_1589700946929",
                    data=data)
                if response.status_code != 200:
                    continue
                else:
                    ret = re.findall("jQuery111307203118624950957_1589700946929\((.*)\)", response.content.decode())[0]
                    musicJson = json.loads(ret)
                    if musicJson.__len__() != 0:
                        musicId = musicJson[0]["id"]
                        self.sourceIndex = i
                        return musicId
                    else:
                        continue
            except:
                pass
            return musicId

    def getMusicUrl(self, musicId):
        url = "http://www.gequdaquan.net/gqss/api.php?callback=jQuery111307203118624950957_1589700946929"
        data = {
            "types": "url",
            "id": musicId,
            "source": self.dataSource[self.sourceIndex]
        }
        try:
            response = requests.post(url=url, data=data)
            ret = re.findall("jQuery111307203118624950957_1589700946929\((.*)\)", response.content.decode())[0]
            musicJson = json.loads(ret)
            return musicJson["url"]
        except:
            return None

    def writeFile(self, musicUrl):
        li = musicUrl.split(".", -1)
        li.reverse()
        filName = self.direction + self.music + "." + li[0]
        print(filName)
        content = requests.get(musicUrl).content
        with open(filName, "wb") as f:
            f.write(content)

    def run(self):
        musicId = self.getMusicId()
        print(musicId)
        musicUrl = self.getMusicUrl(musicId)
        print(musicUrl)
        self.writeFile(musicUrl)
        pass


if __name__ == "__main__":
    music = MusicSpiwer("出山")
    music.run()

輸入音樂名字就能下載到本地啦,非常好用快來試試吧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章