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()

输入音乐名字就能下载到本地啦,非常好用快来试试吧

猜你喜欢

转载自blog.csdn.net/qq_37668436/article/details/106435125