Python3+scrapy 爬取喜马拉雅音乐 音乐和歌名 最简单的爬虫

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。

其最初是为了 页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。

一 、分析数据

1 https://www.ximalaya.com/yinyue/liuxing/p1/ 这个网址就是我们要爬取的的喜马拉雅网址
在这里插入图片描述

2 是要点击右键分析数据 你可以看到 在这里插入图片描述
3. 我把这个地址打开以后就会发现 这是json数据
在这里插入图片描述
4、我们看一下去掉会是什么样子

在这里插入图片描述

5 看到那个后面的id 我还好像在哪见过那 对啦就是在在这里插入图片描述
6 简单的分析结束啦 开始我们的代码之旅吧!

二 、分析完啦 话不多说 给各位看官上代码!

		1、这是我们需要的模块  需要引一下
		import scrapy
		import re
		import json
		import requests

2
创建一个类并继承 最初的爬虫类 并在start_urls 里添加最初的URL 并将结果交给 parse 函数

 class www_ximalaya_com(scrapy.Spider):

	name = "www_ximalaya_com"

	start_urls = [
    "https://www.ximalaya.com/yinyue/liuxing/p1/"
	]

3 接到 网页数据之后 开始解析我们要的 首先是 每个歌曲集合 的id 还有 下一页的 URL 并将获取的数据传到要掉用的parses 函数
页的URL 返回给本身 并进行下一次爬取

  def parse(self, response):
    """
    该函数负责提取下一页的a链接 并提取歌曲集合的id
    拼接url 获取json数据
    :param response: 将数据返回给回调函数 parses
    :return:
    """
    #提取下一页的href 数据  '/yinyue/liuxing/p2/'
    a = response.css("li.page-next a.page-link::attr(href)").extract()[0]
    
    #拼接下一页的url
    a = "https://www.ximalaya.com" + a
    
    
    #提取歌曲集合的a链接的href 并进行正则提取id  /yinyue/460941/  这是一个 列表
    nums = response.css(" div.album-wrapper-card a::attr(href)").extract()
    
    
    # 循环列表进行正则和 拼接URL
    for val in nums:
        # 正则提取id 460941
        s = re.search("\d+",val,re.S)
        numd = s.group()
        #拼接URL
        url = "https://www.ximalaya.com/revision/play/album?albumId=" + numd
        #发起请求并移交给回调函数  parses
        yield scrapy.Request(url,callback=self.parses)
              
    #页数
    count = 2
    #循环页数
    while count <= 34:
        #拼接下一页的URL
        url = "https://www.ximalaya.com/yinyue/liuxing/p%d/" % count
        # 发去请求并移交给本身
        yield scrapy.Request(url,callback=self.parse)
        count += 1

4 接到 parses 函数的调用时 解析 json数据 并保存文件

  def parses(self,response):
    """
    该函用于解析 数据 提取数据 发起请求获取数据
    并将音乐保存在文件当中
    :param response:
    :return:
    """
    # 获取数据
    jsons = response.text
    
    #解析json数据
    jslod = json.loads(jsons)
    
    
    #循环数据
   
    for val in jslod["data"]["tracksAudioPlay"]:
        #获取URL
        url =  val["src"]
        #获取歌名
        name = val["trackName"]
        file_name = val["albumName"]
        lists = []
        #设置列表
        lists.append(file_name)
        lists.append(url)
        lists.append(name)
        # #判断 URL是否为None
        if lists[1] != None:
            判断目录是否存在
            if os.path.isdir(lists[0]) == False:
            #不存在就创建目录
                os.mkdir(lists[0])
                #目录写入文件
                with open("./"+ lists[0] + "/" + lists[2] + ".mp3", "wb+") as f:
                    #发起URL请求并获取内容
                    r = requests.get(lists[1])
                    #写入文件
                    f.write(r.content)
                 #生成错误日志
                self.log("保存文件" + name)
            else:
				#如果存在直接打开目录写入文
                with open("./" + lists[0] + "/" + lists[2] + ".mp3", "wb+") as f:
                    # 发起URL请求并获取内容
                    r = requests.get(lists[1])
                    # 写入文件
                    f.write(r.content)
                    # 生成错误日志
                self.log("保存文件" + name)

5
结果就是这样的 分目录存放

在这里插入图片描述

具体代码如下

import scrapy
import re
import json
import requests
import os

class www_ximalaya_com(scrapy.Spider):

name = "www_ximalaya_com"

start_urls = [
    "https://www.ximalaya.com/yinyue/liuxing/p1/"
]

def parse(self, response):
    """
    该函数负责提取下一页的a链接 并提取歌曲集合的id
    拼接url 获取json数据
    :param response: 将数据返回给回调函数 parses
    :return:
    """
    #提取下一页的href 数据  '/yinyue/liuxing/p2/'
    a = response.css("li.page-next a.page-link::attr(href)").extract()[0]
    
    #拼接下一页的url
    a = "https://www.ximalaya.com" + a
    
    
    #提取歌曲集合的a链接的href 并进行正则提取id  /yinyue/460941/  这是一个 列表
    nums = response.css(" div.album-wrapper-card a::attr(href)").extract()
    # 循环列表进行正则和 拼接URL
    for val in nums:
        # 正则提取id 460941
        s = re.search("\d+",val,re.S)
        numd = s.group()
        #拼接URL
        url = "https://www.ximalaya.com/revision/play/album?albumId=" + numd
        #发起请求并移交给回调函数
        yield scrapy.Request(url,callback=self.parses)
        
        
    # 页数
    count = 2
    #循环页数
    while count <= 34:
        #拼接下一页的URL
        url = "https://www.ximalaya.com/yinyue/liuxing/p%d/" % count
        # 发去请求并移交给本身
        yield scrapy.Request(url,callback=self.parse)
        count += 1
        
        
        
def parses(self,response):
    """
    该函用于解析 数据 提取数据 发起请求获取数据
    并将音乐保存在文件当中
    :param response:
    :return:
    """
    # 获取数据
    jsons = response.text
    
    #解析json数据
    jslod = json.loads(jsons)
    
    
    #循环数据
   
    for val in jslod["data"]["tracksAudioPlay"]:
        #获取URL
        url =  val["src"]
        #获取歌名
        name = val["trackName"]
        file_name = val["albumName"]
        lists = []
        #设置列表  将歌曲集合  URL 歌名  追加进列表 
        lists.append(file_name)
        lists.append(url)
        lists.append(name)
        # #判断 URL是否为None
        if lists[1] != None:
            #打开文件
            if os.path.isdir(lists[0]) == False:
                os.mkdir(lists[0])
                with open("./"+ lists[0] + "/" + lists[2] + ".mp3", "wb+") as f:
                    #发起URL请求并获取内容
                    r = requests.get(lists[1])
                    #写入文件
                    f.write(r.content)
                 #生成错误日志
                self.log("保存文件" + name)
            else:

                with open("./" + lists[0] + "/" + lists[2] + ".mp3", "wb+") as f:
                    # 发起URL请求并获取内容
                    r = requests.get(lists[1])
                    # 写入文件
                    f.write(r.content)
                    # 生成错误日志
                self.log("保存文件" + name)

这就是一个简单的爬虫爬取 喜马拉雅的歌曲 ? 本人仍在继续爬着!!!!!!

在这里插入图片描述

详细项目代码见gitup https://github.com/kong11213613/python3-

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: Python爬虫Scrapy是一种用于网站数据的工具。它可以自动化地从网站上获数据,并将其存储在本地或远程服务器上。Scrapy使用Python编写,具有高效、灵活和可扩展的特点,可以处理大量数据和复杂的网站结构。使用Scrapy可以快速地获所需的数据,从而为数据分析和挖掘提供支持。 ### 回答2: Python爬虫是一种快速、高效的网络爬虫工具,它利用Python语言及其强大的第三方库实现自动化互联网信息的过程。而Scrapy是一个Python爬虫框架,可以帮助我们快速构建持续性的爬虫应用程序。 基于Scrapy框架的爬虫程序设计,首先需要明确自己的目标:确定目标网站、确定目标页面、确定目标信息。其次,在编写程序之前,我们需要构建好爬虫的数据模型,包括目标页面的结构、目标信息的抽规则等。Scrapy框架的核心就是Spider,将会快速地处理目标页面,解析数据并且提出所需信息。这些信息可以经过清洗、存储和分析等处理过程,最终达到我们的预期需求。 爬虫程序的主要步骤是: 1.创建一个Scrapy项目,包括spider、items、pipelines等。 2.定义spider,包括start_urls、parse等。 3.定义item,表示解析结果的结构。 4.定义pipeline,用于处理抓到的数据。 5.运行爬虫程序并保存数据。 在使用Scrapy进行网络爬虫时,需要遵守相关法律法规,尊重目标网站的利益和知识产权,不进行违法、违规的操作,同时遵守robots.txt协议等规定,如不得不允许抓的页面。 总之,对于想要进行网络数据采集的人来说,Scrapy是一个非常强大的Python爬虫框架。它支持异步IO和协程等功能,可以快速、高效地提目标数据。但是,使用Scrapy时需要遵循规则,合理利用,不进行违法、违规操作。 ### 回答3: Scrapy是基于Python语言的爬虫框架,它可以更好的帮我们实现网站的任务。scrapy提供了一整套爬虫流程和一些基本机制,比如:异步处理,中间件机制,数据管道,数据解析等等。这些机制可以帮我们更加简便和高效地进行网络任务。 使用Scrapy网站有以下几个步骤: 1. 安装Scrapy框架 我们需要提前安装好PythonScrapy框架。安装Scrapy比较方便,可以通过pip来安装,命令为:pip install scrapy。 2. 创建scrapy爬虫工程 我们需要使用scrapy startproject 项目名的命令来创建项目,并进入到项目的工程目录来创建爬虫内容,命令为:scrapy genspider 爬虫名 域名。 3. 配置scrapy爬虫的设置 进入到Scrapy工程目录,找到settings.py文件,修改里面的文件配置,包括:User-Agent,爬虫间隔时间,ip代理池设置等等。 4. 配置scrapy爬虫的项 在Spider中定义需要的网站信息,包括URL地址和需要获的数据。 5. 实现URL地址的解析 在Spider中写解析函数,对爬虫到的URL进行解析,获需要的数据内容。 6. 爬虫启动 最后,使用命令scrapy crawl 爬虫名,启动爬虫的URL资源会被输出进行。如果爬虫的URL过多,那么可以使用命令scrapy crawl 爬虫名 -o 文件名.格式名来保存爬虫到的数据内容。 总的来说,Scrapy是一个快速高效的爬虫框架,有着多种策略来处理不同种类的爬虫需求。使用Scrapy进行爬虫的开发,不仅能够为我们省去很多重复性工作,还能够提高我们的开发效率和爬虫的运行效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值