python爬虫训练:爬取榜单信息
一、创作背景
这学期的大作业是要根据这学期的学习内容做一个综合程序,这次是一个爬取酷狗音乐飙升榜单的信息,并下载下来。可以方便和我一样喜欢白嫖的人员免费下载音乐。
二、使用的库
主要使用了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()代表一个文本对应的词云,可以根据文本中词语出现的频率等参数绘制词云词云的绘制形状、尺寸和颜色都可以设定
三、设计概要
- 算法介绍
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爬虫训练:爬取榜单信息相关推荐
- python爬虫实现爬取网页主页信息(html代码)
python爬虫实现爬取网页主页信息(html代码) 1.爬取网站源码 urllib整体介绍: urllib是一个包,收集几个模块来处理网址 urllib.request打开和浏览url中内容 url ...
- 【Python爬虫】爬取企业专利信息
本来是个美好的周末的,但是周五晚上领导给了一个公司名称的Excel,让把这些公司的专利信息爬取下来.本文记录了爬取企业专利信息的心酸过程.码字不易,喜欢请点赞!!! 一.找寻目标网页 在接到这个任务之 ...
- 【Python爬虫】爬取斗鱼直播信息(Fiddler抓包分析)
大年初七了还不开始学习嘛? 过年期间一直再在看斗鱼直播平台的直播,学习主播的操作(骚套路)想着等有机会也来实战一波.看着看着就很想分析一下到底哪些主播观看的人数比较多,又为啥会有这么多人看.所以我们就 ...
- python爬虫:爬取全国航班信息
目标网站 携程:https://flights.ctrip.com/domestic/schedule/ 思路分析 获取到所有的地方航班 打开网址,可以看到如下内容: 这一步目的是获取到这里显示的所有 ...
- python爬虫爬取音乐_利用python爬虫实现爬取网易云音乐热歌榜
利用python爬虫实现爬取网易云音乐热歌榜 发布时间:2020-11-09 16:12:28 来源:亿速云 阅读:102 作者:Leah 本篇文章给大家分享的是有关利用python爬虫实现爬取网易云 ...
- Python爬虫实战爬取租房网站2w+数据-链家上海区域信息(超详细)
Python爬虫实战爬取租房网站-链家上海区域信息(过程超详细) 内容可能有点啰嗦 大佬们请见谅 后面会贴代码 带火们有需求的话就用吧 正好这几天做的实验报告就直接拿过来了,我想后面应该会有人用的到吧 ...
- Python爬虫,爬取51job上有关大数据的招聘信息
Python爬虫,爬取51job上有关大数据的招聘信息 爬虫初学者,练手实战 最近在上数据收集课,分享一些代码. 分析所要爬取的网址 https://search.51job.com/list/000 ...
- Python 爬虫 之 爬取古代的诗歌,并保存本地(这里以爬取李白的所有诗歌为例)(以备作为AI写诗的训练数据)
Python 爬虫 之 爬取古代的诗歌,并保存本地(这里以爬取李白的所有诗歌为例)(以备作为AI写诗的训练数据) 目录
- Python 爬虫 之 爬取王者荣耀的英雄们所有大皮肤图片,并 json 形式保存英雄列表信息到本地
Python 爬虫 之 爬取王者荣耀的英雄们所有大皮肤图片,并 json 形式保存英雄列表信息到本地 目录
最新文章
- 记录一下MATLAB中ode45函数求解非刚性微分方程
- asp.net面试题收集[2006.4.28更新]
- 成功解决FutureWarning: reshape is deprecated and will raise in a subsequent release. Please use .values.
- 循序渐进Java Socket网络编程(多客户端、信息共享、文件传输)
- TRDD got lost again
- CodeForces - 1525D Armchairs(dp)
- C++11线程管理基础
- Spark内核源码学习(暂未学完)
- C#LeetCode刷题之#345-反转字符串中的元音字母​​​​​​​(Reverse Vowels of a String)
- maya python插件_Maya中Python代码插件编译技术视频教程
- 虚幻引擎自带的创建插件的插件
- CentOS系统修改IP
- PVE安装威联通教程
- 51地图标注接口(EZMarker API)
- 机器学习之用Hog+Svm人脸检测、交通标志和字符识别等(初学者)
- torchaudio::is_sox_available关于使用pyinstaller 编译的问题
- Java 复制PPT幻灯片
- mysql默认编码改为gbk_查看改mysql编码方式让它支持中文(gbk或者utf8)
- Python输入密码
- 判断是不是平衡二叉树
热门文章
- 数字化转型“水多深”?IBM“老司机”告诉你
- 小米M365滑板车出现严重性漏洞恐遭远程攻击
- Express脚本的安装
- 控制元素聚焦_聚焦资产商店角色控制器
- 【C#+SQL Server+打印组件】实现电商快递单打印系统 四:快递单设置模块设计(附源码和资源)
- 适合小白的网络安全书籍推荐
- git push报错:fatal: unable to access ‘https://github.com/***/‘:The requested URL returned error: 403
- bash shell sleep_如何使用Linux Sleep命令暂停Bash脚本
- 基于VxWorks的BSP开发指南
- 如果在夜暗里没有夜枭的鸣叫