一、创作背景

这学期的大作业是要根据这学期的学习内容做一个综合程序,这次是一个爬取酷狗音乐飙升榜单的信息,并下载下来。可以方便和我一样喜欢白嫖的人员免费下载音乐。

二、使用的库

主要使用了requests库、BeautifulSoup库用于爬取信息,pandas库用于将信息写入txt文件中,pyplot库和WordCloud库用于绘制词云。

requests库---Requests库是一个Python的第三方库,可以通过调用来帮助我们实现自动爬取HTML网页页面以及模拟人类访问服务器自动提交网络请求。Requests库只有一个核心方法,即request方法。而其余六个方法则是通过调用request方法来实现各种各样的操作。通过封装调用request方法,加之添加其他代码,减少编程人员的代码编写量。

获取HTML网页的主要方法

  • url:欲获取网页的网址链接url
  • params:可选参数,选择字典或者字节流格式
  • **kwargs:12个控制访问的参数

调用requests.get(),会构造一个向服务器请求资源的request对象,然后返回一个包含服务器资源的response对象。

BeautifulSoup库---BeautifulSoup是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.BeautifulSoup会帮你节省数小时甚至数天的工作时间。

将一段文档传入BeautifulSoup 的构造方法,就能得到一个文档的对象, 可以传入一段字符串或一个文件句柄.

from bs4 import BeautifulSoup

soup = BeautifulSoup(open("index.html"))

soup = BeautifulSoup("data")

首先,文档被转换成Unicode,并且HTML的实例都被转换成Unicode编码

BeautifulSoup("Sacré bleu!")

Sacré bleu!

然后,Beautiful Soup选择最合适的解析器来解析这段文档,如果手动指定解析器那么Beautiful Soup会选择指定的解析器来解析文档。

pandas库---pandas含有使数据分析工作变得更快更简单的高级数据结构和操作工具。pandas是基于NumPy构建的,让以NumPy为中心的应用变得更加简单。pandas有两个主要的数据结构:Series 和 DataFrame。虽然它们并不能解决所有问题,但它们为大多数人提供了一种可靠的、易于使用的基础。在这里使用DataFrame进行数据保存,将爬取的数据保存到txt文件中。

pyplot库---matplotlib 是 Python 下著名的绘图库,matplotlib 通过 pyplot 模块提供了一套类似和 Matlab 类似的画图 API,将众多绘图对象所构成的复杂结构隐藏在这套 API 内部。只需调用 pyplot 模块所提供的函数就可快速绘图以及设置图表的各种细节。
matplotlib.pyplot 的引用方式:import matplot.pyplot as plt
pyplot 模块重命名为 plt,有助于提高代码的可读性,plt 代替 matplotlib.pyplot。

WordClude库---wordcloud库把词云当作一个WordCloud对象wordcloud.WordCloud()代表一个文本对应的词云,可以根据文本中词语出现的频率等参数绘制词云词云的绘制形状、尺寸和颜色都可以设定

三、设计概要

  1. 算法介绍
def func1(url):dic = {}for i in range(1,24):html = requests.get(url,headers=headers)soup = BeautifulSoup(html.text,'lxml')titles = soup.select('.pc_temp_songname')href = soup.select('.pc_temp_songname')times = soup.select('.pc_temp_time')data_all = []for titles, times, href in zip(titles, times, href):data = {'歌曲名称': titles.get_text().replace('\n', '').replace('\t', '').replace('\r', '').split('-')[0],'歌手': titles.get_text().replace('\n', '').replace('\t', '').replace('\r', '').split('-')[1],'歌曲时长': times.get_text().strip().replace('\n', '').replace('\t', '').replace('\r', ''),'歌曲链接': href.get('href')}print(data)cnt_songer(data['歌手'], dic)data_all.append(data)data_frame(data_all)time.sleep(2)return dic

例化一个BeautifulSoup对象,并且将网页源码数据加载到该对象中,获取音乐名称、音乐时间以及音乐链接。使用循环将获取的名称、时间、链接通过zip()压缩到data中。返回一个包含上述信息的字典dic。

def word_cloud(items):  # 可视化之词云color_mask = imageio.imread("kugou.jpg")wc = WordCloud(background_color="white",  # 设置背景颜色mask=color_mask,  # 设置背景图片max_words=400,  #width=600,height=800,# stopwords = "", #设置停用词font_path="./simfang.ttf",# 设置中文字体,使得词云可以显示(词云默认字体是“DroidSansMono.ttf字体库”,不支持中文),不加这个的话显示口型乱码max_font_size=50,  # 设置字体最大值min_font_size=10,random_state=30,  # 设置有多少种配色方案margin=2,)wc.generate_from_frequencies(items)plt.figure(1)plt.imshow(wc)plt.axis('off')plt.show()wc.to_file("酷狗TOP500词云.png")

使用matplotlib绘制词云。Color_mask为词云的背景图片,在WordCloud()中设置其他的属性如词云的长宽高、字体颜色等。使用wc.generate_from_frequencies(items)为词云中内容。

四、部分功能介绍

 1.获取歌曲信息

def func1(url):dic = {}for i in range(1,24):html = requests.get(url,headers=headers)soup = BeautifulSoup(html.text,'lxml')titles = soup.select('.pc_temp_songname')href = soup.select('.pc_temp_songname')times = soup.select('.pc_temp_time')data_all = []for titles, times, href in zip(titles, times, href):data = {'歌曲名称': titles.get_text().replace('\n', '').replace('\t', '').replace('\r', '').split('-')[0],'歌手': titles.get_text().replace('\n', '').replace('\t', '').replace('\r', '').split('-')[1],'歌曲时长': times.get_text().strip().replace('\n', '').replace('\t', '').replace('\r', ''),'歌曲链接': href.get('href')}print(data)cnt_songer(data['歌手'], dic)data_all.append(data)data_frame(data_all)time.sleep(2)return dic

此部分是通过BeautifulSoup例化一个BeautifulSoup对象,并且将网页源码数据加载到该对象中,获取音乐名称、音乐时间以及音乐链接。获取歌曲信息,并用循环保存到字典中,最后返回dic字典。字典中包含歌曲名称、歌手、歌曲时间长短以及歌曲链接使用循环将获取的名称、时间、链接。

 2.歌曲下载

def func2(url):response = requests.get(url=url, headers=headers)response.encode = response.apparent_encodinghashs = re.findall('"Hash":"(.*?)"', response.text, re.S)album_ids = re.findall('"album_id":(.*?),"', response.text, re.S)FileNames = re.findall('"FileName":"(.*?)"', response.text, re.S)data = zip(hashs, album_ids, FileNames)for i in data:hash = i[0]album_ids = i[1]FileName = i[2].encode('utf-8').decode('unicode_escape')#print(hash, album_ids, FileName)download_url = 'https://wwwapi.kugou.com/yy/index.php'params = {'r': 'play/getdata','callback': 'jQuery19107150201841602037_1602314563329','hash': '{}'.format(hash),'album_id': '{}'.format(album_ids),'dfid': '3ve7aQ2XyGmN0yE3uv3WcaHs','mid': 'ac3836df72c523f46a85d8a5fd90fe59','platid': '4','_': '1602312793005',}print('.....正在下载  '+FileName)download(download_url,FileName)print('.....下载完成')

这里使用request库,对目标网址进行解析获取Hash、album_id、FileName三个信息并将其压缩到data中。使用循环将data中的数据调入download函数进行下载歌曲。

index.php指的是浏览器开发者模式下从network中获取的php文件中的信息。从php的data中可获取歌曲的hash值和album_id值,用于之后的下载。其中play_url可以之间打开一个网页用于播放音乐,可在这个界面下保存歌曲。

五、完整的代码

因版权原因,不能出现全部代码

六、运行结果

七、总结

酷狗音乐榜单爬虫是用于爬取酷狗音乐飙升榜单,具有绘制词云、爬取信息并保存到txt文件中、下载歌曲的功能

这里主要使用了requests库、BeautifulSoup库用于爬取信息,pandas库用于将信息写入txt文件中,pyplot库和WordCloud库用于绘制词云。

python爬虫训练:爬取榜单信息相关推荐

  1. python爬虫实现爬取网页主页信息(html代码)

    python爬虫实现爬取网页主页信息(html代码) 1.爬取网站源码 urllib整体介绍: urllib是一个包,收集几个模块来处理网址 urllib.request打开和浏览url中内容 url ...

  2. 【Python爬虫】爬取企业专利信息

    本来是个美好的周末的,但是周五晚上领导给了一个公司名称的Excel,让把这些公司的专利信息爬取下来.本文记录了爬取企业专利信息的心酸过程.码字不易,喜欢请点赞!!! 一.找寻目标网页 在接到这个任务之 ...

  3. 【Python爬虫】爬取斗鱼直播信息(Fiddler抓包分析)

    大年初七了还不开始学习嘛? 过年期间一直再在看斗鱼直播平台的直播,学习主播的操作(骚套路)想着等有机会也来实战一波.看着看着就很想分析一下到底哪些主播观看的人数比较多,又为啥会有这么多人看.所以我们就 ...

  4. python爬虫:爬取全国航班信息

    目标网站 携程:https://flights.ctrip.com/domestic/schedule/ 思路分析 获取到所有的地方航班 打开网址,可以看到如下内容: 这一步目的是获取到这里显示的所有 ...

  5. python爬虫爬取音乐_利用python爬虫实现爬取网易云音乐热歌榜

    利用python爬虫实现爬取网易云音乐热歌榜 发布时间:2020-11-09 16:12:28 来源:亿速云 阅读:102 作者:Leah 本篇文章给大家分享的是有关利用python爬虫实现爬取网易云 ...

  6. Python爬虫实战爬取租房网站2w+数据-链家上海区域信息(超详细)

    Python爬虫实战爬取租房网站-链家上海区域信息(过程超详细) 内容可能有点啰嗦 大佬们请见谅 后面会贴代码 带火们有需求的话就用吧 正好这几天做的实验报告就直接拿过来了,我想后面应该会有人用的到吧 ...

  7. Python爬虫,爬取51job上有关大数据的招聘信息

    Python爬虫,爬取51job上有关大数据的招聘信息 爬虫初学者,练手实战 最近在上数据收集课,分享一些代码. 分析所要爬取的网址 https://search.51job.com/list/000 ...

  8. Python 爬虫 之 爬取古代的诗歌,并保存本地(这里以爬取李白的所有诗歌为例)(以备作为AI写诗的训练数据)

    Python 爬虫 之 爬取古代的诗歌,并保存本地(这里以爬取李白的所有诗歌为例)(以备作为AI写诗的训练数据) 目录

  9. Python 爬虫 之 爬取王者荣耀的英雄们所有大皮肤图片,并 json 形式保存英雄列表信息到本地

    Python 爬虫 之 爬取王者荣耀的英雄们所有大皮肤图片,并 json 形式保存英雄列表信息到本地 目录

最新文章

  1. 记录一下MATLAB中ode45函数求解非刚性微分方程
  2. asp.net面试题收集[2006.4.28更新]
  3. 成功解决FutureWarning: reshape is deprecated and will raise in a subsequent release. Please use .values.
  4. 循序渐进Java Socket网络编程(多客户端、信息共享、文件传输)
  5. TRDD got lost again
  6. CodeForces - 1525D Armchairs(dp)
  7. C++11线程管理基础
  8. Spark内核源码学习(暂未学完)
  9. C#LeetCode刷题之#345-反转字符串中的元音字母​​​​​​​(Reverse Vowels of a String)
  10. maya python插件_Maya中Python代码插件编译技术视频教程
  11. 虚幻引擎自带的创建插件的插件
  12. CentOS系统修改IP
  13. PVE安装威联通教程
  14. 51地图标注接口(EZMarker API)
  15. 机器学习之用Hog+Svm人脸检测、交通标志和字符识别等(初学者)
  16. torchaudio::is_sox_available关于使用pyinstaller 编译的问题
  17. Java 复制PPT幻灯片
  18. mysql默认编码改为gbk_查看改mysql编码方式让它支持中文(gbk或者utf8)
  19. Python输入密码
  20. 判断是不是平衡二叉树

热门文章

  1. 数字化转型“水多深”?IBM“老司机”告诉你
  2. 小米M365滑板车出现严重性漏洞恐遭远程攻击
  3. Express脚本的安装
  4. 控制元素聚焦_聚焦资产商店角色控制器
  5. 【C#+SQL Server+打印组件】实现电商快递单打印系统 四:快递单设置模块设计(附源码和资源)
  6. 适合小白的网络安全书籍推荐
  7. git push报错:fatal: unable to access ‘https://github.com/***/‘:The requested URL returned error: 403
  8. bash shell sleep_如何使用Linux Sleep命令暂停Bash脚本
  9. 基于VxWorks的BSP开发指南
  10. 如果在夜暗里没有夜枭的鸣叫