爬虫学习3:爬取酷狗TOP500排行榜

思路分析

查看网页HTML信息

https://www.kugou.com/yy/rank/home/1-8888.html

酷狗网页版不能翻页,通过观察,尝试更改数字1
https://www.kugou.com/yy/rank/home/2-8888.html
https://www.kugou.com/yy/rank/home/3-8888.html
发现可以实现翻页效果,因此更改home/后面数字即可。

获取爬取目标

网页源代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<div class="pc_temp_songlist ">
<ul>
<li class=" " title="陈雪凝 - 绿色" data-index="0">
...
<span class="pc_temp_num"><strong>1</strong></span>
<a href="https://www.kugou.com/song/txskm8f.html" data-active="playDwn" data-index="0" class="pc_temp_songname" title="陈雪凝 - 绿色" hidefocus="true">陈雪凝 - 绿色</a>
<span class="pc_temp_tips_r">
...
<span class="pc_temp_time">4:29</span>
</span>
</li>
<li class=" " title="孤独诗人 - 渡我不渡她" data-index="1">
...
<span class="pc_temp_num"><strong>2</strong></span>
<a href="https://www.kugou.com/song/th6cka5.html" data-active="playDwn" data-index="1" class="pc_temp_songname" title="孤独诗人 - 渡我不渡她" hidefocus="true">孤独诗人 - 渡我不渡她</a>
<span class="pc_temp_tips_r">
...
<span class="pc_temp_time">3:02</span>
</span>
</li>

要爬取的信息:排名、歌手-歌曲名、歌曲时长:

排名: ranks = soup.select('span.pc_temp_num')
歌手-歌曲名: titles = soup.select('div.pc_temp_songlist > ul > li > a')
歌曲时长: times = soup.select('span.pc_temp_tips_r > span')

实例操作

源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 导入库
import requests
from bs4 import BeautifulSoup
import time

# 加入请求头
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'
}

# 获取信息
def get_info(url):
wb_data = requests.get(url,headers=headers)
soup = BeautifulSoup(wb_data.text,'lxml')
ranks = soup.select('span.pc_temp_num') # 排行
titles = soup.select('div.pc_temp_songlist > ul > li > a') # 歌手-歌曲名
times = soup.select('span.pc_temp_tips_r > span') # 歌曲时长
for rank,title,time in zip(ranks,titles,times):
data = {
'rank':rank.get_text().strip(),
'singer':title.get_text().split('-')[0],
'song':title.get_text().split('-')[1],
'time':time.get_text().strip()
}
print(data) # 字典格式打印输出

if __name__ == '__main__':
urls = ['http://www.kugou.com/yy/rank/home/{}-8888.html'.format(str(i)) for i in range(1,24)]
for url in urls: # 构造url
get_info(url)
time.sleep(1) #睡眠1秒

运行结果(部分)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
{'rank': '1', 'singer': '陈雪凝 ', 'song': ' 绿色', 'time': '4:29'}
{'rank': '2', 'singer': '孤独诗人 ', 'song': ' 渡我不渡她', 'time': '3:02'}
{'rank': '3', 'singer': '花姐 ', 'song': ' 狂浪', 'time': '3:01'}
{'rank': '4', 'singer': '张敬轩 ', 'song': ' 只是太爱你', 'time': '4:14'}
{'rank': '5', 'singer': '王琪 ', 'song': ' 站着等你三千年', 'time': '6:21'}
{'rank': '6', 'singer': '陈柯宇 ', 'song': ' 生僻字', 'time': '3:36'}
{'rank': '7', 'singer': '周杰伦 ', 'song': ' 告白气球', 'time': '3:35'}
{'rank': '8', 'singer': '鱼大仙儿 ', 'song': ' 我曾', 'time': '4:46'}
{'rank': '9', 'singer': '张紫豪 ', 'song': ' 可不可以', 'time': '4:00'}
{'rank': '10', 'singer': '胡夏、郁可唯 ', 'song': ' 知否知否', 'time': '4:36'}
{'rank': '11', 'singer': '半阳 ', 'song': ' 一曲相思', 'time': '2:48'}
{'rank': '12', 'singer': '郭聪明 ', 'song': ' 你会遇见更好的人', 'time': '3:46'}
{'rank': '13', 'singer': '陈雪凝 ', 'song': ' 你的酒馆对我打了烊', 'time': '4:11'}
{'rank': '14', 'singer': 'Jennie ', 'song': ' SOLO', 'time': '2:49'}
{'rank': '15', 'singer': '展展与罗罗 ', 'song': ' 沙漠骆驼', 'time': '5:38'}
{'rank': '16', 'singer': '奇然liya、沈谧仁 ', 'song': ' 琵琶行', 'time': '5:35'}
{'rank': '17', 'singer': 'SHAUN ', 'song': ' Way Back Home', 'time': '3:34'}
{'rank': '18', 'singer': '小倩 ', 'song': ' 比悲伤更悲伤的故事', 'time': '4:36'}
{'rank': '19', 'singer': '于文文 ', 'song': ' 体面', 'time': '4:42'}
{'rank': '20', 'singer': '花姐 ', 'song': ' 夜之光', 'time': '3:10'}
{'rank': '21', 'singer': '苏谭谭 ', 'song': ' 渡我不渡她 (正式版)', 'time': '2:18'}
{'rank': '22', 'singer': 'CORSAK、马吟吟 ', 'song': ' 溯 (Reverse)', 'time': '3:12'}
{'rank': '23', 'singer': '贺一航 ', 'song': ' 原来占据你内心的人不是我', 'time': '4:33'}
{'rank': '24', 'singer': '许佳慧 ', 'song': ' 预谋', 'time': '4:09'}
{'rank': '25', 'singer': '广东雨神、许华升 ', 'song': ' 陪你到底', 'time': '4:00'}
{'rank': '26', 'singer': '火箭少女101 ', 'song': ' 卡路里', 'time': '3:52'}
{'rank': '27', 'singer': '李玉刚 ', 'song': ' 清明上河图', 'time': '5:08'}
{'rank': '28', 'singer': '大壮 ', 'song': ' 伪装', 'time': '5:01'}
{'rank': '29', 'singer': '廖晶 ', 'song': ' 爱情小丑', 'time': '4:57'}
{'rank': '30', 'singer': 'G.E.M.邓紫棋 ', 'song': ' 倒数', 'time': '3:49'}
......
+