目录
前言
那废话不多说,先了解准备工作。
1.先下载python,可以搜索python官网,到官网里面下载
2.下载外置模块
- 第一种方法,按win+R,输入cmd,然后输入指令pip install requests
- 第二种方法,打开python的文件位置,找到Scripts文件夹,点进去,然后在上方路径输入cmd,回车,再输入指令pip install requests
爬虫部分
网络爬虫的编写主要分为三步:分析数据、爬取数据、保存数据
第一步:分析数据
我们这次的爬取对象是著名的音乐搜索器。它聚集了超多音乐网站的资源,同时也容易爬取,适合做新手项目。
首先我们按住键盘上的F12。会出现这样一个界面。它是一个网络监视器,可以查看一些背后的信息。然后我们点Network,再按F5或按Ctrl+R刷新一下页面,就会出现一些数据
我们做一些操作时,这个网络监视器就会显示一些数据,所以要想要下载歌曲,就要得到歌曲的下载链接,因此,我们就去搜索歌曲,然后播放一下(播放歌曲时就会出现播放地址,那个就是我们想要的下载地址)。
接着就要去找我们想要的数据在哪里。网络监视器给了我们一个搜索的功能,所以我们可以搜索跟音乐相关的东西,如MP3,m4a,歌曲名字,歌手名字等。找到最后我们发现,在这个接口里有我们想要的数据,所以目的很明确了。
第二步:爬取数据
重点来了!开始写代码了。首先导入我们的模块requests,它是用于爬取数据,向服务器发送请求的。
import requests
然后接下来就是爬虫的基本知识。我们爬取数据时,会向服务气发送请求,然后服务器会响应,给我们一些数据。要想服务器给我们数据,我们作为爬虫得伪装一下,不然服务器看到你这个毛头小子,不理你。
我们先看一下它想要的请求方式是什么,点击Headers,就可以看它想要的请求方式是POST,同时也知道它的请求地址等
接着我们往下滑,就可以看到Reaquest Headers,也就是请求头,它相当于名字,身份证什么的,正好是我们伪装需要的信息,然后最后的From Data就是这个请求网址的一些参数。post请求的网址通常会隐藏一些参数,没有这些参数,也访问不了这个服务器,这些参数类似开门的密码,必须输入。
所以思路很清晰了,开始写代码。
# 导入模块
import requests
#请求地址
url = 'http://www.xmsj.org/'
# 请求头,也就是伪装自己的信息,主要复制后面两个就行,user-Agent就是用户信息
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36'+
'(KHTML,like Gecko) Chrome/80.0.3987.87 Safari/537.36 SE 2.X MetaSr 1.0',
'X-Requested-With': 'XMLHttpRequest'}
# 由于请求参数里的input就是我们搜索的内容,所以要搜索其他内容就把这个换掉。
key = input('输入歌曲名字:')
# 请求参数
data = {'input': key,
'filter': 'name',
'type': 'netease',
'page': '1'}
# 开始请求,要知道是什么请求方式,要一致。因为我们要的数据是一个json格式的,所以后面可以加个.json()
response = requests.post(url = url,headers = headers,data = data).json()
# 因为json格式的数据类似一个字典,按照字典的访问的操作就行了
# 要第二首等的,可以用遍历列表的操作去实现
# 获取歌曲名字
songname = response['data'][0]['title']
# 获取歌手名字
singer = response['data'][0]['author']
# 获取播放地址,即下载地址
playurl = response['data'][0]['url']
第三步:保存数据
我们知道,电脑的文件是以二进制的格式保存的,所以我们可以通过requests模块,得到这个音频文件的二进制数据。
# 先导入模块os,用于文件操作
import os
# 这个意思就是如果当前路径没有这个文件夹,就创建这个文件夹,方便把我们的音乐文件放在这里
if not os.path.exists('./music/'):
os.mkdir('./music/')
# content方法就是获取网址的二进制数据
content = requests.get(url = playurl).content
# 打开文件,并在文件里写入二进制数据
with open('./music/{name} {singer}.mp3'.format(name=songname,singer=singer),'wb') as f:
f.write(content)
f.close()
print('下载完成')
这样就实现了下载歌曲,做一个音乐下载器的原理就这么简单,最后可以用tkinter,pyqt等模块去创建一个窗口,就可以制作出一好看的音乐下载器啦!
完整代码
# 导入模块
import requests
# 导入模块os,用于文件操作
import os
#请求地址
url = 'http://www.xmsj.org/'
# 请求头,也就是伪装自己的信息,主要复制后面两个就行,user-Agent就是用户信息
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36'+
'(KHTML,like Gecko) Chrome/80.0.3987.87 Safari/537.36 SE 2.X MetaSr 1.0',
'X-Requested-With': 'XMLHttpRequest'}
# 由于请求参数里的input就是我们搜索的内容,所以要搜索其他内容就把这个换掉。
key = input('输入歌曲名字:')
# 请求参数
data = {'input': key,
'filter': 'name',
'type': 'netease',
'page': '1'}
# 开始请求,要知道是什么请求方式,要一致。因为我们要的数据是一个json格式的,所以后面可以加个.json()
response = requests.post(url = url,headers = headers,data = data).json()
# 因为json格式的数据类似一个字典,按照字典的访问的操作就行了
# 要第二首等的,可以用遍历列表的操作去实现
# 获取歌曲名字
songname = response['data'][0]['title']
# 获取歌手名字
singer = response['data'][0]['author']
# 获取播放地址,即下载地址
playurl = response['data'][0]['url']
# 这个意思就是如果当前路径没有这个文件夹,就创建这个文件夹,方便把我们的音乐文件放在这里
if not os.path.exists('./music/'):
os.mkdir('./music/')
# content方法就是获取网址的二进制数据
content = requests.get(url = playurl).content
# 打开文件,并在文件里写入二进制数据
with open('./music/{name} {singer}.mp3'.format(name=songname,singer=singer),'wb') as f:
f.write(content)
f.close()
print('下载完成')
新人博客,还请多多关照!