当前位置:   article > 正文

Python爬虫(一)-----酷狗Top500的数据_python爬虫爬取酷狗top500歌曲存入txt

python爬虫爬取酷狗top500歌曲存入txt

简介:python爬虫简单入门,利用Requests和BeautifulSoup第三方库爬取酷狗榜单Top500的信息
思路:
(1)爬取的页面内容
在这里插入图片描述
(2)网页版无法手动翻页,所以我们手动将网址上的数字1改为2,就会跳转到第二页,这为我们后面翻页爬取Top500信息有帮助,每页显示22首歌,我们爬取24页,就能将500首歌的信息全部爬取完成。
在这里插入图片描述
(3)我们需要爬取的信息如上图
爬取过程:
1、获得页面信息

import requests

head={'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'}
url="https://www.kugou.com/yy/rank/home/1-8888.html?from=rank"
re=requests.get(url,headers=head)
print(re.text)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

通过上面代码我们会获取第一页酷狗Top500的网页信息,如下图所示,将其命名为1.html
在这里插入图片描述
2、解析页面
本次解析页面,我们先建立一个testBs4.py文件,在testBs4.py中的代码如下获得我们想要的信息

from bs4 import BeautifulSoup


file =open("1.html", "rb")
html = file.read()
bs = BeautifulSoup(html,"html.parser")
ranks=bs.select('span.pc_temp_num')
titles=bs.select('div.pc_temp_songlist>ul>li>a.pc_temp_songname')
times=bs.select('span.pc_temp_tips_r>span.pc_temp_time')
for rank,title,time in zip(ranks,titles,times):
    data={
        'rank':rank.get_text().strip(),
        'songname':title.get_text().split('-')[0].strip(),
        'singer':title.get_text().split('-')[1].strip(),
        'songtime':time.get_text().strip()
    }
    print(data)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

最后输出数据以下
在这里插入图片描述
3、整个代码

#@Author:Kingsley
# -*- codeing = utf-8 -*-
#@time :2022/9/22 0022 20:43
#@File: main.py
#@Software: PyCharm

import  requests
from bs4 import BeautifulSoup
import time

head={'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'}


#解析获取的网页
def get_info(url):
    kg_data=requests.get(url,headers=head)
    bs=BeautifulSoup(kg_data.text,'lxml')
    ranks = bs.select('span.pc_temp_num')
    titles = bs.select('div.pc_temp_songlist>ul>li>a.pc_temp_songname')
    times = bs.select('span.pc_temp_tips_r>span.pc_temp_time')
    for rank, title, time in zip(ranks, titles, times):
        data = {
            'rank': rank.get_text().strip(),
            'songname': title.get_text().split('-')[0].strip(),
            'singer': title.get_text().split('-')[1].strip(),
            'songtime': time.get_text().strip()
        }
        print(data)

if __name__=='__main__':
    urls= ["https://www.kugou.com/yy/rank/home/{}-8888.html?from=rank".format((str(i))) for i in range(1,25) ]
    for url in urls:
        get_info(url)
    time.sleep(2)
  • 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
  • 32
  • 33
  • 34
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/609010
推荐阅读
相关标签
  

闽ICP备14008679号