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

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

import scrapy
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import timeclass WyyspiderSpider(scrapy.Spider):name = 'wyySpider'allowed_domains = ['163.com']start_urls = ['https://music.163.com/playlist?id=19xxxxx7']

先实现一下自动登录功能获取cookie
首先导一下自动化测试的包(Selenium)
没有这个包的话去控制台:pip --default-timeout=100 install selenium -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time

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

到这网站下载相同版本的驱动程序:https://sites.google.com/a/chromium.org/chromedriver/home

如果版本跟我的一样可以去网盘下载:
链接: https://pan.baidu.com/s/1M-gME2R8EEhEoFlPaDhbmA 提取码: 7iai

解压后记住这个驱动的位置,在爬虫文件写一个获取cookie的函数
以下代码的坐标不一定适合各位的电脑,不过给你们安利个物理外挂(电脑微信截图Alt+A)

        def getCookie(self):# 获取谷歌的驱动,参数为刚刚驱动程序的位置driver = webdriver.Chrome("C:/Users/Administrator/AppData/Local/Programs/Python38/Lib/site-packages/selenium/webdriver/chrome/chromedriver.exe")# -----------------selenium自动登录-----------------------# 打开谷歌然后访问指定的网站driver.get("https://music.163.com/")# 最大化,睡眠是怕网速慢没加载出来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': 'music.163.com', 'expiry': 2147483647, 'httpOnly': False, 'name': 'WM_TID', 'path': '/', 'secure': False, 'value': 'UnQj6SSNqN9BEVdubmNcEjpl%2B9DA'}, {'domain': 'music.163.com', 'expiry': 2147483647, 'httpOnly': False, 'name': 'WM_NIKE', 'path': '/', 'secure': False, 'value': '9ca17ae2e6ffcda170e2e6ee87f4508ef58483ea4a97968ea7c54e879a8eaaf445aebc83b6e933f3f1c0b4c82af0fea7c3b92af697b7a6dc7b82afc09ad98ca695bc5082ecbcb1e772b7889b3d1c15bf28da0bbfb5b95aa8795f073adbc9c98ed79a28d8aa7f450f1ae9dd9b77a85edbf9ac625f1ef84d8f970b4e7bfd8cd21b48e8c8ec17df3e7a898f74488ef9bb5c837e2a3'}, {'domain': '.music.163.com', 'httpOnly': False, 'name': 'WNMCID', 'path': '/', 'sameSite': 'Strict', 'secure': False, 'value': 'fdygqk.1611989994304.01.0'}, {'domain': '.music.163.com', 'httpOnly': False, 'name': 'WEVNSM', 'path': '/', 'sameSite': 'Strict', 'secure': False, 'value': '1.0.0'}, {'domain': 'music.163.com', 'expiry': 2147483647, 'httpOnly': False, 'name': 'WM_NI', 'path': '/', 'secure': False, 'value': '6IyEYqBqpyZMITjt9DB4tPdzuXUFC%2BNyOiu3S04CTC5Nsv2Q4gkMM0BQ2SPZxQWvItmyodTwnsbSFFqD3rS84rG3qyG%2F31L7zdp9q7N%2BpRDmBw19hwtHD1UTE%3D'}, {'domain': '.music.163.com', 'expiry': 1927349994, 'httpOnly': False, 'name': 'NMTID', 'path': '/', 'secure': False, 'value': '00O-pWx8ZDJJQfiFkHzsgin07nYSmUAAAF3UhdN2w'}, {'domain': '.163.com', 'expiry': 4765589994, 'httpOnly': False, 'name': '_ntes_nuid', 'path': '/', 'secure': False, 'value': '738fc9cd89d6d8799fa76b3348d25d7d'}, {'domain': '.163.com', 'expiry': 4765589994, 'httpOnly': False, 'name': '_ntes_nnid', 'path': '/', 'secure': False, 'value': '738fc9cd89d6d8799fa76b3348d25d7d,1611989994150'}, {'domain': '.music.163.com', 'expiry': 1769671794, 'httpOnly': False, 'name': '_iuqxldmzr_', 'path': '/', 'secure': False, 'value': '32'}, {'domain': '.music.163.com', '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 = []for i in driver.get_cookies():temp.append(i['name'] + "=" + i['value'])# 返回字符串cookiereturn ';'.join(temp)

所以这个函数基本就写完了,自动登录后获取cookie是不是很爽!!!
现在重写一下def start_requests(self),这个函数是在请求发起前执行的

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

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

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

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

一句启动爬虫的命令,眨眨眼的时间 ~
数据就进去了哦!原来我的喜爱歌单只有不到500~

下面就是爬虫源代码

import scrapy
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
import reclass WyyspiderSpider(scrapy.Spider):name = 'wyySpider'allowed_domains = ['163.com']start_urls = ['https://music.163.com/playlist?id=19xxxxx7']def getCookie(self):# 获取谷歌的驱动,参数为刚刚驱动程序的位置driver = webdriver.Chrome("C:/Users/Administrator/AppData/Local/Programs/Python38/Lib/site-packages/selenium/webdriver/chrome/chromedriver.exe")# -----------------selenium自动登录-----------------------# 打开谷歌然后访问指定的网站driver.get("https://music.163.com/")# 最大化,睡眠是怕网速慢没加载出来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字典for i in driver.get_cookies():temp.append(i['name'] + "=" + i['value'])# 返回字符串cookiereturn ';'.join(temp)def start_requests(self):# 定义请求头的时候调用一下getCookie获取一下cookieheaders = {'Cookie': self.getCookie(),'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'}# 注意url是个列表这里拿下标[0],然后把headers请求头塞进去,交给parse函数yield scrapy.Request(url=self.start_urls[0], headers=headers, callback=self.parse)def parse(self, response):# 匹配歌曲名的正则表达式patt = re.compile(r'<a href="/song.id=.*?">([^<|{]*?)</a>')# 找到所有歌曲名listdata = re.findall(patt, response.text)# 把数据写进txt文件with open(file="response.txt", mode="w+", encoding="utf-8") as file:for item in listdata:file.write(item+"\n")

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

看我如何用 Python 爬取网易云音乐歌单相关推荐

  1. 如何用 Python 爬取网易云音乐歌单

    点击⬆️方"逆锋起笔",公众号回复 编程资源领取大佬们推荐的学习资料 作者:我不是秃头哆唻咪 (侵删) https://blog.csdn.net/weixin_44864260/ ...

  2. 如何用Python爬取网易云音乐歌单

    此货很干,跟上脚步!!! Cookie cookie是什么东西? 小饼干?能吃吗? 简单来说就是你第一次用账号密码访问服务器 服务器在你本机硬盘上设置一个身份识别的会员卡(cookie) 下次再去访问 ...

  3. python爬取网易云音乐歌单

    获取网易云音乐的某个分类下的歌单的详细页地址.歌单标题.歌单播放量.歌单贡献者.歌单索引信息等.并保存到csv文件中去. 用到的模块:requests.time.BeautifulSoup 选择不同类 ...

  4. PHP爬虫音乐,PHP 爬虫———爬取网易云音乐歌单

    爬取网易云音乐歌单 PHP + QueryList + Puppeteer + Nodejs 使用 Composer 安装库 如果你之前没有接触过Composer,强烈建议你学习一下.Composer ...

  5. 如何用Python爬取网易云歌曲?秘诀在这~

    说到近年来程序界最火的事情是什么呢?您一定会想到Python的兴起.根据研究,Python已经成为排名前三的语言.也许你会困惑,Python能这么火的原因是什么呢? 首先是Python工具上手很快,它 ...

  6. 用python爬取网易云音乐歌单列表

    本文分为两个部分:基础知识和正文,其中基础知识包括什么正则表达式以及Beautifulsoup4的使用. 一.正则表达式 正则表达式用于字符串查找.合法性检查以及作为程序员的工具箱使用. 字符串查找: ...

  7. 如何用 Python 爬取网易云音乐的 10w+ 评论?附详细代码解读

    在简单学习了Python爬虫之后,我的下一个目标就是网易云音乐.因为本人平时就是用它听的歌,也喜欢看歌里的评论,所以本文就来爬一爬网易云音乐的评论吧! 正式进入主题 首先是找到目标网页并分析网页结构, ...

  8. python爬取网易云音乐歌单_【python】爬取并批量下载网易云歌单,嗨翻暑假!

    [Python] 纯文本查看 复制代码# 利用 Selenium 抓取淘宝商品并用 PyQuery 解析得到商品的图片.名称.价格.购买人数. # 店铺名称.店铺所在地信息,并将其保存到MongoDB ...

  9. 利用python爬取网易云心爱歌单

    一 cookie是什么东西? 小饼干?糖果?能吃吗? 简单来说就是你第一次用账号密码访问服务器 服务器在你本机硬盘上设置一个身份识别的会员卡(cookie) 下次再去访问的时候只要亮一下你的卡片(co ...

最新文章

  1. Linux命令学习总结:hexdump
  2. 从零开始学习 ASP.NET MVC 1.0 (三) Controller/Action 深入解析与应用实例 【转】
  3. Python 爬虫之 Beautiful Soup 模块使用指南
  4. 自动删除过期归档日志
  5. (4) ebj学习:ejb发布web service
  6. Java写一个简单的扫雷游戏
  7. java mcv_Spring和SpringMCV配置
  8. 广东省的盆友们,这波退税及时雨你赶上了吗?
  9. 微型计算机原理IMUL指令,微机原理与系统设计实验
  10. Linux chapter test 9
  11. 如何更改计算机安全策略设置,用批处理更改本地安全策略
  12. w ndows7打印机添加,Windows7操作系统下添加打印机教程
  13. python中split什么意思_python中split的意思是什么(python中字符串的意思)
  14. 2003系统服务器设置,服务器2003系统设置
  15. uikit响应式对应屏幕大小
  16. QGIS操作教程——图说中国人口
  17. Poco C++库简介
  18. From Seeing to Moving: A Survey on Learning for Visual Indoor Navigation (VIL)
  19. flinksql实时读取kafka写入mysql
  20. 入门分析,多线程竞争为何不安全?

热门文章

  1. 模块 8 - 10:网络间通信考试
  2. 安卓扁平化之路专题(一)Android 4.4新特性
  3. Linux 显示文件内容命令
  4. Asp.Net中索引器的介绍
  5. 贝叶斯估计实验(matlab)
  6. tpl php,簡介 *.tpl.php
  7. Android中OnkeyDown()和OnBackPressed()
  8. Bootstrapping sample
  9. 执行Sqlserver中waitfor delay延时操作或waitfor time定时操作
  10. 计算机编程课英语,计算机编程及常用术语英语词汇大全课件.doc