1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 看我如何用 Python 爬取网易云音乐歌单

看我如何用 Python 爬取网易云音乐歌单

时间:2023-01-24 13:46:12

相关推荐

看我如何用 Python 爬取网易云音乐歌单

此货很干,跟上脚步!!!

Cookie

cookie是什么东西?

小饼干?能吃吗?

简单来说就是你第一次用账号密码访问服务器

服务器在你本机硬盘上设置一个身份识别的会员卡(cookie)

下次再去访问的时候只要亮一下你的卡片(cookie)

服务器就会知道是你来了,因为你的账号密码等信息已经刻在了会员卡上

需求分析

爬虫要访问一些私人的数据就需要用cookie进行伪装

想要得到cookie就得先登录,爬虫可以通过表单请求将账号密码提交上去

但是在火狐的F12截取到的数据就是,

网易云音乐先将你的账号密码给编了码,再发post请求

所以我们在准备表单数据的时候就已经被卡住了

这时候我们就可以使用自动化测试Selenium帮助我们去登录

登录好之后就获取cookie给爬虫使用

OK,废话也废话完了,直接开整吧!!

首先给我创建一个爬虫项目和爬虫

在cmd创建

用Pycharm打开这个项目

首先修改配置文件setting.py

1.关闭机器人协议

2.取消禁用cookie的功能

现在就回到爬虫文件wyySpider.py准备前期的工作

修改start_urls里的网址准备一个请求头

很多人学习python,不知道从何学起。

很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。

很多已经做案例的人,却不知道如何去学习更加高深的知识。

那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!

QQ群:705933274

首先用火狐浏览器打开网易云音乐,登录后进入到个人主页

在爬虫代码那里准备一下,修改一下start_urls

mon.action_chainsimportActionChainsimporttimeclassWyyspiderSpider(scrapy.Spider):name='wyySpider'allowed_domains=['']start_urls=['/playlist?id=19xxxxx7']

先实现一下自动登录功能获取cookie

首先导一下自动化测试的包(Selenium)

没有这个包的话去控制台:pip --default-timeout=100 install selenium -i /simple/ --trusted-host

mon.action_chainsimportActionChainsimporttime

导完包还要一个谷歌的驱动程序,先看一下自己的谷歌版本

到这网站下载相同版本的驱动程序:/a//chromedriver/home

如果版本跟我的一样可以去网盘下载:

链接: /s/1M-gME2R8EEhEoFlPaDhbmA 提取码: 7iai

解压后记住这个驱动的位置,在爬虫文件写一个获取cookie的函数

以下代码的坐标不一定适合各位的电脑,不过给你们安利个物理外挂(电脑微信截图Alt+A)

defgetCookie(self):#获取谷歌的驱动,参数为刚刚驱动程序的位置driver=webdriver.Chrome("C:/Users/Administrator/AppData/Local/Programs/Python38/Lib/site-packages/selenium/webdriver/chrome/chromedriver.exe")#-----------------selenium自动登录-----------------------#打开谷歌然后访问指定的网站driver.get("/")#最大化,睡眠是怕网速慢没加载出来driver.maximize_window()time.sleep(1)#鼠标从(0,0)向x(1435px),y(35px)移动,用左键点击一下ActionChains(driver).move_by_offset(1435,35).click().perform()time.sleep(0.3)#点击其他方式ActionChains(driver).move_by_offset(-480,575).click().perform()time.sleep(0.3)#同意条款ActionChains(driver).move_by_offset(-218,-10).click().perform()time.sleep(0.3)#手机登录ActionChains(driver).move_by_offset(107,-100).click().perform()time.sleep(0.3)#输入账号密码#通过css选择器获取id为"p"的标签,然后send_keys就是模拟输入一些信息driver.find_element_by_css_selector("#p").send_keys("账号")driver.find_element_by_css_selector("#pw").send_keys("密码")time.sleep(0.3)#点击登录ActionChains(driver).move_by_offset(110,15).click().perform()time.sleep(1)#找到头像悬浮img=driver.find_element_by_css_selector("div.head:nth-child(1)>img:nth-child(1)")ActionChains(driver).move_to_element(img).perform()time.sleep(0.5)#点击我的主页ActionChains(driver).move_by_offset(0,40).click().perform()time.sleep(0.5)#点击喜欢的音乐ActionChains(driver).move_by_offset(-870,830).click().perform()time.sleep(0.3)#-----------------selenium自动登录-----------------------

登录完毕后就可以获取cookie,但看一下下面的cookie

[{'domain':'','expiry':2147483647,'httpOnly':False,'name':'WM_TID','path':'/','secure':False,'value':'UnQj6SSNqN9BEVdubmNcEjpl%2B9DA'},{'domain':'','expiry':2147483647,'httpOnly':False,'name':'WM_NIKE','path':'/','secure':False,'value':'9ca17ae2e6ffcda170e2e6ee87f4508ef58483ea4a97968ea7c54e879a8eaaf445aebc83b6e933f3f1c0b4c82af0fea7c3b92af697b7a6dc7b82afc09ad98ca695bc5082ecbcb1e772b7889b3d1c15bf28da0bbfb5b95aa8795f073adbc9c98ed79a28d8aa7f450f1ae9dd9b77a85edbf9ac625f1ef84d8f970b4e7bfd8cd21b48e8c8ec17df3e7a898f74488ef9bb5c837e2a3'},{'domain':'.','httpOnly':False,'name':'WNMCID','path':'/','sameSite':'Strict','secure':False,'value':'fdygqk.1611989994304.01.0'},{'domain':'.','httpOnly':False,'name':'WEVNSM','path':'/','sameSite':'Strict','secure':False,'value':'1.0.0'},{'domain':'','expiry':2147483647,'httpOnly':False,'name':'WM_NI','path':'/','secure':False,'value':'6IyEYqBqpyZMITjt9DB4tPdzuXUFC%2BNyOiu3S04CTC5Nsv2Q4gkMM0BQ2SPZxQWvItmyodTwnsbSFFqD3rS84rG3qyG%2F31L7zdp9q7N%2BpRDmBw19hwtHD1UTE%3D'},{'domain':'.','expiry':1927349994,'httpOnly':False,'name':'NMTID','path':'/','secure':False,'value':'00O-pWx8ZDJJQfiFkHzsgin07nYSmUAAAF3UhdN2w'},{'domain':'.','expiry':4765589994,'httpOnly':False,'name':'_ntes_nuid','path':'/','secure':False,'value':'738fc9cd89d6d8799fa76b3348d25d7d'},{'domain':'.','expiry':4765589994,'httpOnly':False,'name':'_ntes_nnid','path':'/','secure':False,'value':'738fc9cd89d6d8799fa76b3348d25d7d,1611989994150'},{'domain':'.','expiry':1769671794,'httpOnly':False,'name':'_iuqxldmzr_','path':'/','secure':False,'value':'32'},{'domain':'.','expiry':1769671794,'httpOnly':False,'name':'JSESSIONID-WYYY','path':'/','secure':False,'value':'OoCMxNwGV%5CfZD2OSzAXovf4ASVZsJ8UQ4sgg7JfH075cKTD%2FW3sMzZj%2BpayS1EnNVXzRm%2F2GxfzIoNv3FTjYxKeNFZWqf6UeiMSc1%2BG98kgsEM94juuE%5Cs18k2%2BPNPAp3hU0G%5CFDUtjkimCR5pgOIOI%3A1611991794102'}]

是列表加字典的结构,而Scrapy的cookie是字符串类型的,所以我们要做一个转型

#将driver获取的字典类型的cookie提取name和value封装成字符串temp=[]foriindriver.get_cookies():temp.append(i['name']+"="+i['value'])#返回字符串cookiereturn';'.join(temp)

所以这个函数基本就写完了,自动登录后获取cookie是不是很爽!!!

现在重写一下def start_requests(self),这个函数是在请求发起前执行的

在这个函数把请求头给塞进去,因为setting那边没有定义

defstart_requests(self):#定义请求头的时候调用一下getCookie获取一下cookieheaders={'Cookie':self.getCookie(),'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/88.0.4324.104Safari/537.36'}#注意url是个列表这里拿下标[0],然后把headers请求头塞进去,交给parse函数yieldscrapy.Request(url=self.start_urls[0],headers=headers,callback=self.parse)

请求前一切准备好之后,在解析函数(parse)进行保存一下数据,记得到re包

defparse(self,response):#匹配歌曲名的正则表达式patt=pile(r'<ahref="/song.id=.*?">([^<|{]*?)</a>')#找到所有歌曲名listdata=re.findall(patt,response.text)#把数据写进txt文件withopen(file="../response.txt",mode="w+",encoding="utf-8")asfile:foriteminlistdata:file.write(item+"\n")

一句启动爬虫的命令,眨眨眼的时间 ~

数据就进去了哦!原来我的喜爱歌单只有不到500~

下面就是爬虫源代码

mon.action_chainsimportActionChainsimporttimeimportreclassWyyspiderSpider(scrapy.Spider):name='wyySpider'allowed_domains=['']start_urls=['/playlist?id=19xxxxx7']defgetCookie(self):#获取谷歌的驱动,参数为刚刚驱动程序的位置driver=webdriver.Chrome("C:/Users/Administrator/AppData/Local/Programs/Python38/Lib/site-packages/selenium/webdriver/chrome/chromedriver.exe")#-----------------selenium自动登录-----------------------#打开谷歌然后访问指定的网站driver.get("/")#最大化,睡眠是怕网速慢没加载出来driver.maximize_window()time.sleep(1)#以下坐标以自己的电脑为准#鼠标从(0,0)向x(1435px),y(35px)移动,用左键点击一下ActionChains(driver).move_by_offset(1435,35).click().perform()time.sleep(0.3)#点击其他方式ActionChains(driver).move_by_offset(-480,575).click().perform()time.sleep(0.3)#同意条款ActionChains(driver).move_by_offset(-218,-10).click().perform()time.sleep(0.3)#手机登录ActionChains(driver).move_by_offset(107,-100).click().perform()time.sleep(0.3)#输入账号密码#通过css选择器获取id为"p"的标签,然后send_keys就是模拟输入一些信息driver.find_element_by_css_selector("#p").send_keys("账号")driver.find_element_by_css_selector("#pw").send_keys("密码")time.sleep(0.3)#点击登录ActionChains(driver).move_by_offset(110,15).click().perform()time.sleep(1)#找到头像悬浮img=driver.find_element_by_css_selector("div.head:nth-child(1)>img:nth-child(1)")ActionChains(driver).move_to_element(img).perform()time.sleep(0.5)#点击我的主页ActionChains(driver).move_by_offset(0,40).click().perform()time.sleep(0.5)##点击喜欢的音乐#ActionChains(driver).move_by_offset(-870,830).click().perform()#time.sleep(0.3)#-----------------selenium自动登录-----------------------#将driver获取的字典类型的cookie提取name和value封装成字符串#临时存放每个拼接好的key=value字符串temp=[]#遍历driver给的cookies字典foriindriver.get_cookies():temp.append(i['name']+"="+i['value'])#返回字符串cookiereturn';'.join(temp)defstart_requests(self):#定义请求头的时候调用一下getCookie获取一下cookieheaders={'Cookie':self.getCookie(),'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/88.0.4324.104Safari/537.36'}#注意url是个列表这里拿下标[0],然后把headers请求头塞进去,交给parse函数yieldscrapy.Request(url=self.start_urls[0],headers=headers,callback=self.parse)defparse(self,response):#匹配歌曲名的正则表达式patt=pile(r'<ahref="/song.id=.*?">([^<|{]*?)</a>')#找到所有歌曲名listdata=re.findall(patt,response.text)#把数据写进txt文件withopen(file="response.txt",mode="w+",encoding="utf-8")asfile:foriteminlistdata:file.write(item+"\n")

在这里还是要推荐下我自己建的Python学习Q群:705933274,群里都是学Python的,如果你想学或者正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份最新的Python进阶资料和零基础教学,欢迎进阶中和对Python感兴趣的小伙伴加入!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。