初学scrapy并爬取 喜马拉雅音乐想和大家分享分享

  • 一 、分析数据
  • 二 、分析完啦 话不多说 给各位看官上代码!
  • 具体代码如下
  • 这就是一个简单的爬虫爬取 喜马拉雅的歌曲 ? 本人仍在继续爬着!!!!!!
  • 详细项目代码见gitup https://github.com/kong11213613/python3-

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

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

一 、分析数据

1 https://www.ximalaya.com/yinyue/liuxing/p1/ 这个网址就是我们要爬取的的喜马拉雅网址

2 是要点击右键分析数据 你可以看到
3. 我把这个地址打开以后就会发现 这是json数据

4、我们看一下去掉会是什么样子

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

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

     1、这是我们需要的模块  需要引一下import scrapyimport reimport jsonimport 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]#拼接下一页的urla = "https://www.ximalaya.com" + a#提取歌曲集合的a链接的href 并进行正则提取id  /yinyue/460941/  这是一个 列表nums = response.css(" div.album-wrapper-card a::attr(href)").extract()# 循环列表进行正则和 拼接URLfor val in nums:# 正则提取id 460941s = re.search("\d+",val,re.S)numd = s.group()#拼接URLurl = "https://www.ximalaya.com/revision/play/album?albumId=" + numd#发起请求并移交给回调函数  parsesyield scrapy.Request(url,callback=self.parses)#页数count = 2#循环页数while count <= 34:#拼接下一页的URLurl = "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"]:#获取URLurl =  val["src"]#获取歌名name = val["trackName"]file_name = val["albumName"]lists = []#设置列表lists.append(file_name)lists.append(url)lists.append(name)# #判断 URL是否为Noneif 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 osclass 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]#拼接下一页的urla = "https://www.ximalaya.com" + a#提取歌曲集合的a链接的href 并进行正则提取id  /yinyue/460941/  这是一个 列表nums = response.css(" div.album-wrapper-card a::attr(href)").extract()# 循环列表进行正则和 拼接URLfor val in nums:# 正则提取id 460941s = re.search("\d+",val,re.S)numd = s.group()#拼接URLurl = "https://www.ximalaya.com/revision/play/album?albumId=" + numd#发起请求并移交给回调函数yield scrapy.Request(url,callback=self.parses)# 页数count = 2#循环页数while count <= 34:#拼接下一页的URLurl = "https://www.ximalaya.com/yinyue/liuxing/p%d/" % count# 发去请求并移交给本身yield scrapy.Request(url,callback=self.parse)count += 1def parses(self,response):"""该函用于解析 数据 提取数据 发起请求获取数据并将音乐保存在文件当中:param response::return:"""# 获取数据jsons = response.text#解析json数据jslod = json.loads(jsons)#循环数据for val in jslod["data"]["tracksAudioPlay"]:#获取URLurl =  val["src"]#获取歌名name = val["trackName"]file_name = val["albumName"]lists = []#设置列表  将歌曲集合  URL 歌名  追加进列表 lists.append(file_name)lists.append(url)lists.append(name)# #判断 URL是否为Noneif 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-

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

  1. scrapy爬取网易云音乐的MP3链接

    最近遇到需要从网易云音乐爬取MP3的url的需求,看了很多github以及博客内容,都是直接拿着参数请求抓包得到的url,网上的一些api还能用,但是很多都已经不能用了,而且能用的那些也里面的MP3u ...

  2. 毕设总结2:使用python scrapy 爬取 网易云音乐

    网易云音乐爬取教程 爬取网易云热歌榜 分析网页结构 爬取网易云热歌榜 分析网页结构 先还是通过 [scrapy genspider music https://music.163.com/discov ...

  3. Scrapy 爬取网易云音乐播放量百万以上的歌单以及歌单详情

    创建爬虫 查看歌单链接 https://music.163.com/#/discover/playlist 用 requests 下载此链接的网页发现不是原网页,应该是被跳转到了登录页面.分析之后得到 ...

  4. 使用scrapy 爬取酷狗音乐歌手及歌曲名并存入mongodb中

    备注还没来得及写,共爬取八千多的歌手,每名歌手平均三十首歌曲算,大概二十多万首歌曲 run.py 1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 ...

  5. python3 + scrapy爬取妹子图(meizitu.com)

    前言 在学会scrapy之前,都是用requests + BeautifulSoup + lxml来爬取的,这样也能爬到想要的东西,但缺点是代码有些乱,可能需要自己对项目进行梳理归类.而scrapy框 ...

  6. python3 scrapy爬取智联招聘存mongodb

    写在前面,这次写智联招聘的爬虫是其次,主要的是通过智联招聘上的数据信息弄一个数据挖掘的小项目,这一篇主要是如何一气呵成的将智联招聘上的招聘信息给爬下来 (一)scrapy框架的使用 scrapy框架是 ...

  7. Python3 Scrapy爬取猫眼TOP100代码示例

  8. python爬取音乐并保存_python3 实现爬取TOP500的音乐信息并存储到mongoDB数据库中

    爬取TOP500的音乐信息,包括排名情况.歌曲名.歌曲时间. 网页版酷狗不能手动翻页进行下一步的浏览,仔细观察第一页的URL: 这里尝试将1改为2,再进行浏览,恰好是第二页的信息,再改为3,恰好是第三 ...

  9. scrapy_redis分布式爬取酷狗音乐

    scrapy_redis分布式爬取酷狗音乐 前言 安装scrapy_redis 创建scrapy项目 spider模块 items模块.pipelines模块 setting.py 调试 运行 成果图 ...

最新文章

  1. neo4j应用场景举例超过论文索引 公司投资风险 图书引用等场景的举例
  2. Iframe 高度自适应
  3. HTML中常用的实体字符
  4. optee HSM的实现
  5. CF1540B-Tree Array【数学期望,dp】
  6. 十大经典排序算法(下)
  7. qgis oracle,用 QGIS 画矢量交通路线图
  8. likeshop100%开源免费商用电商系统,PC商城、H5商城、小程序商城、安卓APP商城、苹果APP商城全部100%开源,免费商用
  9. c 更新mysql数据_MySQL插入更新删除数据
  10. CentOS 7安装部署zabbix3.4
  11. html mysql 数据列表_html的列表加载数据库
  12. 三维重建笔记_重建方法简介与汇总
  13. PHP实现常用的数据结构之链表
  14. Java 中status意思_struts的status属性
  15. 免实名域名是什么意思?
  16. Windows10修改本地用户账户名(彻底修改)
  17. 说说 iphone 数据线(充电线) 原装正品和仿制品、假货等的区别
  18. 2021年Java开发实战!java开发安卓app的流程
  19. 红旗linux系统服务器,红旗linux11系统
  20. Linux脚本编程:sudo命令下设置定时任务

热门文章

  1. 解决微信环境下无法通过链接唤起App Store、微信访问App Store 链接白屏问题
  2. dw html5中怎么设置图片自动切换,DW制作九宫格全屏亮灯轮播图片且自动切换图片教程...
  3. 查询员工的薪水涨幅情况
  4. 医疗图像处理与深度学习(二)
  5. 怎样卸载计算机更新程序,windows10升级程序卸载怎么操作_windows10升级程序怎样卸载删除-win7之家...
  6. python 打印一定范围的素数(质数)
  7. 业务流程图绘制方法经验谈(下篇)
  8. Photoshop小技巧 (去掉照片中多余的人物)
  9. slot卡槽封装公共组件
  10. 软件测试岗位有哪些任职要求?