因为数据要存入Excel中,所以首要目标是找个办法将数据能够存入excel中

经过在网上一番搜索后,发现用python里的xlwt模块可以比较容易的解决

一、准备工作

1、安装xlwt模块:

可以看http://blog.csdn.net/junli_chen/article/details/53666309这篇文章

不过好像也可以直接在cmd里用 pip install xlwt 命令安装。不过保险一点就是按链接的文章来操作

2、xlwt的操作:

基本操作:http://www.cnblogs.com/wind-wang/p/5663539.html

xlwt模块列宽、行高heights详解:http://www.bkjia.com/Pythonjc/1073801.html

这两篇文章都写的比较详细了,我就不在赘述了。在这里还是要感谢这些文章的作者

能够分享资料和经验

二、爬虫目的

写这个爬虫的目的主要是抓取在网易云音乐里,华语男歌手top10的歌手的热门歌曲信息。

信息包括歌曲名称,歌曲所属专辑和歌曲的网页链接

三、网页分析

1、首先先打开http://music.163.com/#/discover/artist/cat?id=1001,这个是华语男歌手的页面

然后我们查看下源代码,发现看不到我们想要的信息

这时我们再次右击网页发现有个查看框架的源代码

点进去后就发现了想要的内容

其实还有一种办法,就是点击审查元素,找到一个叫做cat?id=1001的文件

在Response里可以看到代码,然后在Headers里可以看到request URL

到现在我们可以发现http://music.163.com/#/discover/artist/cat?id=1001这个url不能看到页面的源码,

而http://music.163.com/discover/artist/cat?id=1001这个可以,其实就是有一个"#"的区别

现在点进一个歌手的界面

同样的用查看框架源代码的方法,可以获取到这个页面的源码,接下来就可以爬取了

四、代码思路

0、这2个网页好像并没有弄什么反爬的手段,所以直接爬就行

1、抓取到每个歌手的url和名字,名字可以用在文件存储的时候

2、进入到歌手的界面中可以看到50首热门歌曲,我们要做的就是爬取

这些歌曲的名称,歌曲所属专辑和歌曲链接。期间要用到BeautifulSoup和正则表达式。

3、通过xlwt模块将数据存入Excel

代码:

import xlwt
import requests
from bs4 import BeautifulSoup
import redef get_url(url):try:r = requests.get(url)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:print('wrong!!!!!!!!!!!!!')def singer_url(url):#只抓取前10位的歌手html = get_url(url)soup = BeautifulSoup(html,'html.parser')top_10 = soup.find_all('div',attrs = {'class':'u-cover u-cover-5'})singers = []for i in top_10:singers.append(re.findall(r'.*?<a class="msk" href="(/artist\?id=\d+)" title="(.*?)的音乐"></a>.*?',str(i))[0])#问号有问题#解析的代码和源代码的顺序不同,在用正则表达式的时候要注意song_info(singers)def song_info(singers):url = 'http://music.163.com'for singer in singers:try:new_url = url + str(singer[0])songs = get_url(new_url)soup = BeautifulSoup(songs,'html.parser')Info = soup.find_all('textarea',attrs = {'style':'display:none;'})[0]songs_url_and_name = soup.find_all('ul',attrs = {'class':'f-hide'})[0]#print(songs_url_and_name)datas = []data1 = re.findall(r'"album".*?"name":"(.*?)".*?',str(Info.text))data2 = re.findall(r'.*?<li><a href="(/song\?id=\d+)">(.*?)</a></li>.*?',str(songs_url_and_name))for i in range(len(data2)):datas.append([data2[i][1],data1[i],'http://music.163.com/#'+ str(data2[i][0])])# print(datas)save_excel(singer,datas)except:continuedef save_excel(singer,datas):fpath = 'E:/python/网易云音乐数据/'book = xlwt.Workbook()sheet1 = book.add_sheet('sheet1',cell_overwrite_ok = True)sheet1.col(0).width = (25*256)sheet1.col(1).width = (30*256)sheet1.col(2).width = (40*256)#xlwt中列宽的值表示方法:默认字体0的1/256为衡量单位。#xlwt创建时使用的默认宽度为2960,既11个字符0的宽度#所以我们在设置列宽时可以用如下方法:#width = 256 * 20    256为衡量单位,20表示20个字符宽度heads = ['歌曲名称','专辑','歌曲链接']count = 0 print('正在存入文件......')for head in heads:sheet1.write(0,count,head)count += 1i = 1for data in datas:j = 0for k in data:sheet1.write(i,j,k)j += 1i += 1book.save(fpath + str(singer[1]) + '.xls')#括号里写存入的地址print('OK!')def main():url = 'http://music.163.com/discover/artist/cat?id=1001'#华语男歌手页面singer_url(url)main()

五、问题分析

1、在用BeautifulSoup解析第一个页面时,发现解析出来的数据和源码的顺序不同

例如:<atitle="周杰伦的音乐"href="/artist?id=6452"class="msk"></a>这是源码

<aclass="msk"href="/artist?id=6452"title="周杰伦的音乐"></a>这是解析出来的数据

明显的顺序不同,所以在用正则表达式匹配的时候要按解析的数据来匹配

还有这个行代码

singers.append(re.findall(r'.*?<a class="msk" href="(/artist\?id=\d+)" title="(.*?)的音乐"></a>.*?',str(i))[0])
artist\?id=\d+

这里面的?要加一个转义字符,不然会匹配不到。

2、在获取歌曲信息的时候,textarea标签那段,我用正则表达式不能够很好的获取,每个歌手都有不同的情况。

所以我就在ul标签里获取歌曲链接和名称,在textarea里获取专辑名称

3、最后在看表格文件的时候发现字段太长,实在太难看了。就去搜了下能不能操作下表格中的单元格,

网上的资料还是挺多的,这个操作也不难,就把这个功能加了进去

六、结果

python爬虫----网易云音乐歌曲爬取并存入Excel相关推荐

  1. Python爬虫-网易云音乐自动化爬取下载

    文章目录 前言 爬取分析 完整代码 爬取效果 拓展代码 前言 上一篇简述了如何使用 Python 爬虫自动爬取CSDN博客排行榜数据并自动整理成Excel文件,这篇文章来看看如何自动化爬取网易云音乐的 ...

  2. python爬取音乐_利用Python对网易云音乐进行爬取!无所不爬的爬虫啊!

    今天,我们利用Python 中的selenium爬取网易云音乐中林俊杰<将故事写成我们>的评论,具体界面如下: 私信小编01 获取数十套PDF!爬虫 web都有的呢! 具体代码如下: #此 ...

  3. python爬取网易云音乐_Python 从零开始爬虫(七)——实战:网易云音乐评论爬取(附加密算法)...

    前言 某宝评论区已经成功爬取了,jd的也是差不多的方法,说实话也没什么好玩的,我是看上它们分析简单,又没加密才拿来试手的.如果真的要看些有趣的评论的话,我会选择网易云音乐,里面汇聚了哲学家,小说家,s ...

  4. 利用Python网络爬虫实现对网易云音乐歌词爬取

    今天小编给大家分享网易云音乐歌词爬取方法. 本文的总体思路如下: 找到正确的URL,获取源码: 利用bs4解析源码,获取歌曲名和歌曲ID: 调用网易云歌曲API,获取歌词: 将歌词写入文件,并存入本地 ...

  5. python3爬虫进阶之自动登录网易云音乐并爬取指定歌曲评论

    ** python3爬虫进阶之自动登录网易云音乐并爬取指定歌曲评论 ** 一.访问网易云首页,找到所需元素的位置 用浏览器打开网易云首页https://music.163.com/之后,发现我们要找的 ...

  6. php 爬取一个人的网易云评论,网易云音乐评论爬取

    # coding=gbk import requests import json c='网易云爬虫实战一' print(c) music_url = 'https://music.163.com/#/ ...

  7. python爬虫网易云音乐评论再分析_爬取网易云音乐的评论后,竟有这种发现!

    原标题:爬取网易云音乐的评论后,竟有这种发现! 作者 | 志颖 责编 | 胡巍巍 用过网易云音乐听歌的朋友都知道,网易云音乐每首歌曲后面都有很多评论,热门歌曲的评论更是接近百万或者是超过百万条. 现在 ...

  8. python爬虫网易云音乐评论最多的歌_使用Python爬一爬网易云音乐上那些评论火爆的歌曲...

    网易云音乐这款音乐APP本人比较喜欢,用户量也比较大,而网易云音乐之所以用户众多和它的歌曲评论功能密不可分,很多歌曲的评论非常有意思,其中也不乏很多感人的评论.但是,网易云音乐并没有提供热评排行榜和按 ...

  9. python爬虫网易云音乐评论最多的歌_Python网易云音乐评论爬虫,歌曲的全部评论...

    用过网易云音乐听歌的朋友都知道,网易云音乐每首歌曲后面都有很多评论,热门歌曲的评论更是接近百万或者是超过百万条.现在我就来分享一下如何爬取网易云音乐歌曲的全部评论,由于网易云音乐的评论都做了混淆加密处 ...

最新文章

  1. 谷歌发布开源Dopamine 2.0
  2. 存储过程--分页与C#代码调用
  3. 概念的图解 —— 数学
  4. netstat/nmap/netcat用法
  5. VS2015 编译输出的*.lib,*.dll,*.exe的区别
  6. 开源播放器 支持视频广告
  7. windows mobile 编译(生成镜像)提速
  8. mysql 终端模拟_mysql客户端模拟脏读、幻读和可重复读
  9. axios 获取上传进度_PHP获取HTTP body内容的方法总结
  10. 前台一键备份数据库+PHP实现方式
  11. 蓝色企业CMS网站后台管理模板
  12. RubyCritic:一款不错的检测代码质量工具
  13. cmake编译gtest测试程序(三)
  14. java数组的定义(菜鸟教程)
  15. apk反编译java_Android的APK文件如何反编译成Java文件
  16. 寻找成功人生的方向-在新东方听讲座的感悟
  17. wincc变量数据归档(案例)
  18. python如何求偏导_求偏导数怎样做啊
  19. Python读取相对路径文件
  20. 《富爸爸,穷爸爸》这本书有何价值?

热门文章

  1. Golang map转换为json
  2. 贝塞尔曲线(Bezier)之水波纹的手机充电动画效果(二)
  3. VR 真的来了,这些必备的入行知识你了解多少?
  4. 如何将图片中人物的面部打码
  5. 厉害呀!这些图片难得
  6. Springboot整合socket服务端
  7. 黑客总是如此神秘,他们是怎样成为虚拟世界的主人?
  8. 党建统领 科学谋划|农发行江西峡江支行全力推进国际结算业务
  9. 微信小程序点击按钮弹出弹窗_微信小程序点击按钮 弹出底部上拉菜单
  10. Java 加载、操作和保存WPS文字文档