Scrapy+Selenium自动获取cookie爬取网易云音乐个人喜爱歌单

首先,需要说明的是Scrapy是一个强大的Python爬虫框架,可以帮助我们快速高效地爬取网页信息。但是对于一些需要登录后才能访问的网站,我们需要使用到Selenium来实现模拟浏览器登录,获取cookie后使用Scrapy进行后续的爬取。

下面是大致的操作流程:

  1. 安装Scrapy和Selenium库
pip install scrapy selenium
  1. 安装浏览器驱动

你需要根据你正在使用的浏览器下载相应的驱动程序

Chrome浏览器驱动下载地址:http://npm.taobao.org/mirrors/chromedriver/

Firefox浏览器驱动下载地址:https://github.com/mozilla/geckodriver/releases

  1. 使用Selenium模拟用户登录
from selenium import webdriver
import time

driver = webdriver.Chrome() #启动Chrome浏览器
driver.get("https://music.163.com/") #打开网易云音乐首页
time.sleep(2) # 暂停2秒,等待页面加载

# 点击登录按钮
driver.switch_to.frame("contentFrame")
login_button = driver.find_element_by_css_selector("a[href='javascript:;']")
login_button.click()
time.sleep(1)

# 切换到账号密码登录
driver.switch_to.frame("contentFrame")
login_method = driver.find_element_by_css_selector("a[data-action='login']")
login_method.click()
time.sleep(1)

# 输入账号密码
driver.switch_to.frame("contentFrame")
username_input = driver.find_element_by_name('username')
password_input = driver.find_element_by_name('password')
username_input.send_keys("your_username")
password_input.send_keys("your_password")
time.sleep(1)

# 点击登录
login_btn = driver.find_element_by_css_selector(".j-primary")
login_btn.click()
time.sleep(2)

# 保存cookie
cookies = driver.get_cookies()
driver.quit()

使用Selenium模拟用户登录,向网站提交账号密码,完成登录操作。在获取cookie之前需要等待一段时间,否则可能会出现cookie没有完全加载的情况。

  1. 使用Scrapy爬取数据

在获取到cookie之后,我们就可以利用Scrapy进行数据爬取了。这里举一个例子,爬取网易云音乐个人喜爱歌单的所有歌曲信息。

import scrapy

class MyMusicSpider(scrapy.Spider):
    name = 'my_music_spider'
    allowed_domains = ['music.163.com']
    start_urls = ['https://music.163.com/']

    def start_requests(self):
        # 添加cookie信息,模拟登录状态
        cookie = {i['name']: i['value'] for i in cookies}
        headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36'}
        yield scrapy.Request(self.start_urls[0], headers=headers, cookies=cookie)

    def parse(self, response):
        # 解析个人喜爱歌单url
        url = response.css('a[href="/my/music?type=loved"]').attrib['href']
        yield response.follow(url, self.parse_music_list)

    def parse_music_list(self, response):
        # 获取歌单中的所有歌曲信息
        for song_item in response.css('.srchsongst .item'):
            song_name = song_item.css('.ttl a b::text').get()
            singer_name = song_item.css('.text a::text').get()
            print(song_name, singer_name)

上述代码中是一个Scrapy爬虫的基本框架,其中使用了之前获取到的cookie信息,模拟登录状态。然后通过解析网页内容,找到个人喜爱歌单的url,进而获取其中的所有歌曲信息。

至此,我们完成了Scrapy和Selenium配合进行自动登录爬取网易云音乐个人喜爱歌单的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Scrapy+Selenium自动获取cookie爬取网易云音乐个人喜爱歌单 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • css使图片变灰的实现方法

    下面是关于如何使用CSS将图片变灰的实现方法的详细说明: 1. 使用CSS的filter属性 CSS的filter属性可以将图片经过一定的处理后呈现出不同的效果,其中包括将图片变灰的效果。具体实现代码如下: .gray-img { filter: grayscale(100%); } 在上述示例中,我们为被指定了class为.gray-img的图片元素设置了…

    css 2023年6月11日
    00
  • uniapp使用条件编译#ifdef(跨平台设备兼容)

    使用条件编译#ifdef是一种在不同平台之间实现代码差异化的方式,通过在不同环境下编译不同的代码,以达到跨平台设备兼容的目的。下面是详细讲解“uniapp使用条件编译#ifdef”的攻略: 1. 添加预处理指令 在uniapp项目中,我们通常需要根据平台类型来编写不同版本的代码。为了实现这一目的,我们需要在项目中添加一些预处理指令,这些指令可以用于根据不同环…

    css 2023年6月9日
    00
  • 详解如何使用image-set适配移动端高清屏图片

    下面我将详细讲解如何使用image-set适配移动端高清屏图片。 什么是image-set image-set是CSS3提供的一个函数,能够根据屏幕分辨率的不同,自动选择最合适的图片。这里的图片可以是不同分辨率的同一张图片,也可以是不同大小但内容相近的多张图片。 image-set的语法 image-set语法如下: background-image: im…

    css 2023年6月9日
    00
  • 原生JS实现轮播效果+学前端的感受(防止走火入魔)

    为了实现轮播效果,我们可以通过原生JS来编写代码,无需使用任何框架或插件。下面是实现轮播效果的详细攻略: 一、准备工作 1. 创建HTML结构 我们需要在HTML中创建一个包含整个轮播的容器,以及多个图片项的容器。代码示例如下: <div class="carousel"> <div class="carous…

    css 2023年6月10日
    00
  • 使用Visual Studio进行文件差异比较的问题小结

    使用Visual Studio进行文件差异比较的问题小结 1.为什么使用Visual Studio进行文件差异比较? Visual Studio可以快速的比较两个文件的差异,并且提供直观的修改视图,可以方便的定位并修改文件中的问题。将Visual Studio作为默认的差异比较工具,可以方便的进行文件比对,特别是对于代码文件进行比对和合并操作,可以提高代码的…

    css 2023年6月10日
    00
  • 用html+css+js实现的一个简单的图片切换特效

    实现一个简单的图片切换特效,可以使用 HTML、CSS 和 JavaScript。 整个过程可以分为以下几个步骤: 构建 HTML 结构 样式布局 实现图片切换效果 具体实现流程: 构建 HTML 结构 <div class="slider"> <img src="img1.jpg" alt=&quo…

    css 2023年6月9日
    00
  • 用ul li实现边框重合并附带鼠标经过效果

    要使用ul和li标签实现边框重叠,并附带鼠标经过效果,可以按照以下步骤进行操作: 创建一个无序列表ul,并添加需要展示的内容,例如: <ul> <li>菜单1</li> <li>菜单2</li> <li>菜单3</li> </ul> 使用CSS对ul和li进行样式…

    css 2023年6月10日
    00
  • HTML5离线缓存在tomcat下部署可实现图片flash等离线浏览

    HTML5离线缓存是一种可以在浏览器离线的情况下访问网站的技术,通过在应用程序的manifest文件中指定需要缓存的资源,可以实现特定网页的离线可访问。在Tomcat服务器下,也可以轻松地实现HTML5离线缓存的部署。 以下是HTML5离线缓存在tomcat下部署的完整攻略: 1. 创建Manifest文件 HTML5离线缓存需要使用manifest文件来指…

    css 2023年6月9日
    00
合作推广
合作推广
分享本页
返回顶部