0

0

怎样用Scrapy爬取酷狗音乐的歌曲?

PHPz

PHPz

发布时间:2023-06-22 22:59:21

|

3119人浏览过

|

来源于php中文网

原创

随着互联网的发展,网络上的信息量越来越大,人们需要爬取不同网站上的信息来进行各种分析和挖掘。而scrapy是一个功能完备的python爬虫框架,它可以自动化爬取网站数据,并以结构化的形式输出。酷狗音乐是广受欢迎的在线音乐平台之一,下面我将介绍怎样使用scrapy来完成对酷狗音乐的歌曲信息爬取。

1. 安装Scrapy

Scrapy是基于Python语言的框架,所以首先需要配置好Python环境。在安装Scrapy之前,需要先安装好Python和pip工具。安装完成后,即可通过以下命令来安装Scrapy:

pip install scrapy

2. 新建Scrapy项目

Scrapy提供了一套命令行工具来方便我们创建新的项目。在命令行中输入以下代码:

scrapy startproject kuwo_music

执行后,将会在当前目录下创建一个名为“kuwo_music”的Scrapy项目。在该项目中,我们需要新建一个爬虫来完成对酷狗音乐的歌曲信息爬取。

3. 新建爬虫

在Scrapy项目中,爬虫是用来抓取和解析特定网站数据的程序。在“kuwo_music”项目目录下,执行以下命令:

scrapy genspider kuwo www.kuwo.cn 

上述命令会在“kuwo_music/spiders”目录下创建一个名为“kuwo.py”的文件,该文件即为我们的爬虫程序代码。我们需要在该文件中定义网站数据的抓取和解析过程。

4. 网站请求和页面解析

在新建的“kuwo.py”文件中,首先需要导入必要的模块:

import scrapy
from kuwo_music.items import KuwoMusicItem
from scrapy_redis.spiders import RedisSpider
from scrapy_redis import get_redis_from_settings
from scrapy.utils.project import get_project_settings

通过以上代码,我们可以使用Scrapy框架提供的各种工具类和方法,以及项目中的自定义模块。在继续编写爬虫代码前,我们需要先分析酷狗音乐歌曲信息所在的网页。

北极象沉浸式AI翻译
北极象沉浸式AI翻译

免费的北极象沉浸式AI翻译 - 带您走进沉浸式AI的双语对照体验

下载

打开浏览器,访问www.kuwo.cn,在搜索栏中输入歌曲名并搜索,会发现网页跳转到搜索结果页面。在搜索结果页面中,可以看到每首歌曲的相关信息,如歌曲名称、歌手、播放时长等。我们需要通过Scrapy发送请求,并解析搜索结果页面,获取每首歌曲的详细信息。

在爬虫程序代码中,我们需要实现以下两个方法:

def start_requests(self):
    ...
    
def parse(self, response):
    ...

其中,start_requests()方法用来发送初始网页请求,并将解析方法parse()指定为回调函数;而parse()方法则用来解析网页、提取数据,并处理响应。具体代码如下:

class KuwoSpider(RedisSpider):
    name = 'kuwo'
    allowed_domains = ['kuwo.cn']
    redis_cli = get_redis_from_settings(get_project_settings())

    def start_requests(self):
        keywords = ['爱情', '妳太善良', '说散就散']
        # 搜索结果页面的url
        for keyword in keywords:
            url = f'http://www.kuwo.cn/search/list?key={keyword}&rformat=json&ft=music&encoding=utf8&rn=8&pn=1'
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        data = json.loads(response.text)
        # 获取搜索结果页面的每个歌曲信息
        song_list = data['data']['list']
        for song in song_list:
            music_id = song['musicrid'][6:]
            song_name = song['name']
            singer_name = song['artist']
            album_name = song['album']

            # 根据歌曲id获取歌曲详细信息
            url = f'http://www.kuwo.cn/url?format=mp3&rid=MUSIC_{music_id}&response=url&type=convert_url3&br=128kmp3&from=web&t=1639056420390&httpsStatus=1&reqId=6be77da1-4325-11ec-b08e-11263642326e'
            meta = {'song_name': song_name, 'singer_name': singer_name, 'album_name': album_name}
            yield scrapy.Request(url=url, callback=self.parse_song, meta=meta)

    def parse_song(self, response):
        item = KuwoMusicItem()
        item['song_name'] = response.meta.get('song_name')
        item['singer_name'] = response.meta.get('singer_name')
        item['album_name'] = response.meta.get('album_name')
        item['song_url'] = response.text.strip()
        yield item

在上述代码中,我们先在start_requests()方法中定义了要搜索的歌曲关键字,并构造每个歌曲搜索结果页面的url,并发送请求。在parse()方法中,我们解析搜索结果页面,并提取每首歌曲的相关信息,包括歌曲名称、歌手、专辑等。然后,我们再根据每首歌曲的id,构造获取对应歌曲信息的url,并利用Scrapy的元数据(meta)机制传递歌曲名称、歌手、专辑等信息。最后,我们在parse_song()方法中解析歌曲信息页面并提取歌曲播放地址,并输出到自定义的KuwoMusicItem对象中。

5. 数据存储和使用

在以上代码中,我们定义了一个自定义的KuwoMusicItem对象,来存储爬取到的歌曲信息。我们可以通过工具类RedisPipeline来将爬取到的数据存储到Redis数据库中:

ITEM_PIPELINES = {
    'kuwo_music.pipelines.RedisPipeline': 300,
}

同时,我们也可以通过工具类JsonLinesItemExporter将数据存储到本地csv文件中:

from scrapy.exporters import JsonLinesItemExporter
import csv

class CsvPipeline(object):
    # 将数据存储到csv文件
    def __init__(self):
        self.file = open('kuwo_music.csv', 'w', encoding='utf-8', newline='')
        self.exporter = csv.writer(self.file)
        self.exporter.writerow(['song_name', 'singer_name', 'album_name', 'song_url'])

    def close_spider(self, spider):
        self.file.close()

    def process_item(self, item, spider):
        self.exporter.writerow([item['song_name'], item['singer_name'], item['album_name'], item['song_url']])
        return item

最后,在命令行中执行以下命令即可启动Scrapy爬虫:

scrapy crawl kuwo

以上即是怎样使用Scrapy框架来完成对酷狗音乐的歌曲信息爬取的详细介绍,希望能为大家提供一些参考和帮助。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

713

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

625

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

738

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

617

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1235

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

547

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

574

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

696

2023.08.11

俄罗斯搜索引擎Yandex最新官方入口网址
俄罗斯搜索引擎Yandex最新官方入口网址

Yandex官方入口网址是https://yandex.com;用户可通过网页端直连或移动端浏览器直接访问,无需登录即可使用搜索、图片、新闻、地图等全部基础功能,并支持多语种检索与静态资源精准筛选。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1

2025.12.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python Scrapy 网络爬虫实战视频教程
Python Scrapy 网络爬虫实战视频教程

共16课时 | 5.4万人学习

CSS3 教程
CSS3 教程

共18课时 | 4.1万人学习

Django 教程
Django 教程

共28课时 | 2.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号