当前位置: 首页 > 后端技术 > Python

爬取音乐资源

时间:2023-03-25 20:11:17 Python

一直在苦苦寻找好的音乐资源。python爬虫非常强大。我只是有一点python基础,想做一个脚本来爬取一些mp3资源。废话不多说先看看效果吧。/home/roland/PycharmProjects/Main.pypleaseinputtheartistname:billieeilishProcessfinishedwithexitcode0运行后需要输入爬取的艺术家名字,这里我们填一个喜欢的艺术家名字回车(支持中文歌手),日志不输出内容,而是直接将mp3文件保存到save_path路径下,如下图所示:这里使用的python版本是3.6。理论上3.X版本可以直接运行,不需要额外安装request库。代码分析下面函数的作用是拼接请求头,请求方式为POST获取方式:打开浏览器控制台---->NetWork选项--->发送请求--->查看POST,取chrome举个例子,按F12打开控制台,按照下图找到FormData。当然,并不是所有的请求方法都会使用数据头。这样做的目的是模仿浏览器访问网页的过程。然后将需要添加的字段依次添加到header中,其中pages和content是动态变量(原来的url是ajax异步加载)content是要搜索的歌手defresemble_data(content,index):data={}data['types']='search'data['count']='30'data['source']='网易'data['pages']=indexdata['name']=contentdata=urllib.parse.urlencode(data).encode('utf-8')返回数据另外,我们还需要获取User-Agent对应的code:opener.addheaders=[('User-Agent','Mozilla/5.0(X11;Linuxx86_64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/65.0.3325.181Safari/537.36')]这个东西哪里弄的?我们可以直接从浏览器的控制台获取,目的是将python请求伪装成浏览器访问。#设置代理proxy_support=urllib.request.ProxyHandler({'http:':'119.6.144.73:81'})opener=urllib.request.build_opener(proxy_support)urllib.request.install_opener(opener)#在这里设置代理我们还设置了一个代理ip来防止服务器的反爬虫机制(频繁访问一个ip会被认为是爬虫而不是访问者操作,这只是一个例子,我们可以抓取代理的地址和端口号ip让更多的ip同时访问,减少被识别为爬虫的可能性)下面是爬取代理ip的例子(不感兴趣可以跳过)importurllib.requestimporturllib.parseimportreurl='http://31f.cn/'head={}head['User-Agent']='Mozilla/5.0(X11;Linuxx86_64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/65.0.3325.181Safari/537.36'response=urllib.request.urlopen(url)html_document=response.read().decode('utf-8')pattern_ip=re.compile(r'(\d+\.\d+\.\d+\.\d+)[\s\S]*?(\d{2,4})')ip_list=pattern_ip.findall(html_document)print(len(ip_list))foriteminip_list:print("IP地址是:%s端口numberis:%s"%(item[0],item[1]))这里的响应其实是一个音乐文件的链接地址,格式类似xxxxuuid.mp3,我们直接命名为默认的uuid.mp3songname.mp3,然后以二进制文件格式写入文件。data={}data['types']='url'data['id']=iddata['source']='网易'data=urllib.parse.urlencode(data).encode('utf-8')response=urllib.request.urlopen(url,data)music_url_str=response.read().decode('utf-8')music_url=pattern.findall(music_url_str)结果=urllib.request.urlopen(music_url[0])file=open(save_path+name+'.mp3','wb')file.write(result.read())至于Requesturl,你可以在这里获取(当然,这只是一个例子,这个url是nottheurlintheexample):下面是完整的代码,只需将音乐文件的保存路径save_path='/home/roland/Spider/Img/更改为自己的保存路径即可importurllib.requestimporturllib.parseimportjsonimportredefresemble_data(content,index):data={}data['types']='search'data['count']='30'data['source']='netease'data['pages']=indexdata['name']=contentdata=urllib.parse.urlencode(data).encode('utf-8')returndatadefrequest_music(url,content):#设置代理proxy_support=urllib.request.ProxyHandler({'http:':'119.6.144.73:81'})opener=urllib.request.build_opener(proxy_support)opener.addheaders=[('User-Agent','Mozilla/5.0(X11;Linuxx86_64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/65.0.3325.181Safari/537.36')]urllib.request.install_opener(opener)#setproxyagenttotal=[]pattern=re.compile(r'\(([\s\S]*)\)')foriin范围(1,10):data=resemble_data(content,str(i))response=urllib.request.urlopen(url,data)result=response.read().decode('unicode_escape')json_result=pattern.findall(结果)total.append(json_result)returntotaldefsave_music_file(id,name):save_path='/home/roland/Spider/Img/'pattern=re.compile('http.*?mp3')url='http://www.gequdaquan.net/gqss/api.php?callback=jQuery111307210973120745481_1533280033798'data={}data['types']='url'data['id']=iddata['source']='网易'数据=urllib.parse.urlencode(data).encode('utf-8')response=urllib.request.urlopen(url,data)music_url_str=response.read().decode('utf-8')music_url=pattern.findall(music_url_str)result=urllib.request.urlopen(music_url[0])文件=open(save_path+name+'.mp3','wb')file.write(result.read())file.flush()file.close()defmain():url='http://www.gequdaquan.net/gqss/api.php?callback=jQuery11130967955054499249_1533275477385'content=input('请输入艺术家姓名:')result=request_music(url,content)forgroupinresult[0]:target=json.loads(group)对于目标中的项目:save_music_file(str(item['id']),str(item['name']))main()