酷狗音乐TOP500爬虫
时间:2019-02-19
本文章向大家介绍酷狗音乐TOP500爬虫,主要包括酷狗音乐TOP500爬虫使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
学习的产物总是充实和快乐的,下面就来看一下今天的酷狗音乐排行榜的爬取吧!!!
首先我们通过观看酷狗网页的源代码可以看到:
红色记号画出来的就是我们这次爬取需要的信息,我们通过观察可以找到他们位于哪些标签之中,最后通过select方法提取出来就行了。
下面呈上代码:
import requests
from bs4 import BeautifulSoup
import time
def get_HTML(url):
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36",
"referer": "https://www.kugou.com/yy/rank/home/1-6666.html?from=rank"
}
try:
r = requests.get(url,headers = headers)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return ""
def explain_HTML(mylist, html):
soup = BeautifulSoup(html,'html.parser')
songs = soup.select('div.pc_temp_songlist > ul > li > a')
ranks = soup.select('span.pc_temp_num')
times = soup.select('span.pc_temp_time')
for rank,song,time in zip(ranks,songs,times):
data = [
rank.get_text().strip(),
song.get_text().split("-")[1],
song.get_text().split("-")[0],
time.get_text().strip()
]
mylist.append(data)
def print_HTML(mylist):
for i in range(500):
x = mylist[i]
with open("F:/KuGou.text",'a',encoding = 'UTF-8') as f:
f.write("{0:<10}\t{1:{4}<25}\t{2:{4}<20}\t{3:<10}\n".format(x[0],x[1],x[2],x[3],chr(12288)))
#用format方法可以删除列表多余的符号使爬取内容更简洁
#chr(12288)表示中文输入情况下的空格可以使结果更有效的对齐
# 但是由于某些歌曲包含了英文格式的数字、字母等所以结果并不是那么整齐
if __name__ == '__main__':
url_0 = 'http://www.kugou.com/yy/rank/home/'
url_1 = '-8888.html'
mylist = []
with open("F:/KuGou.text",'a',encoding = "UTF-8") as f:
f.write("{0:<10}\t{1:{4}<25}\t{2:{4}<20}\t{3:<10}\n".format("排名","歌曲","歌手","时间",chr(12288)))
for j in range(1,24):
url = url_0 + str(j) + url_1
html = get_HTML(url)
explain_HTML(mylist, html)
print_HTML(mylist)
time.sleep(1)#设置爬虫速度防止访问过快造成爬取失败
由于上述注释中的问题,结果的格式并不是很完美,但是如果要爬取的信息只有中文的话应该就很整齐了:
- “AS3.0高级动画编程”学习:第三章等角投影(上)
- su: 无法设置用户ID: 资源暂时不可用
- NumPY学习笔记
- LVS负载均衡下session共享的实现方式-持久化连接
- Centos6.9下RabbitMQ集群部署记录
- “AS3.0高级动画编程”学习:第三章等角投影(下)
- zabbix监控主机cpu达到80%后报警
- ssh登陆服务器locale告警的处理方法
- as3.0中如何阻止事件冒泡?
- Nginx+upstream针对后端服务器容错的运维笔记
- MongoDB日常运维操作命令小结
- flash builder代码格式化以及其它快捷键
- Repeater,DataList,DataGrid
- flash/flex builder在IE中stage.stageWidth始终为0的解决办法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法