酷狗音乐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)#设置爬虫速度防止访问过快造成爬取失败

 由于上述注释中的问题,结果的格式并不是很完美,但是如果要爬取的信息只有中文的话应该就很整齐了:

 

### 使用Python编写爬虫程序抓取酷狗音乐TOP500歌曲列表数据 为了实现这一目标,可以采用 `Selenium` 和 `BeautifulSoup` 的组合来完成任务。以下是具体的实现方法: #### 1. 安装必要的库 在开始之前,需安装所需的 Python 库: ```bash pip install selenium beautifulsoup4 requests ``` #### 2. 设置 Chrome 浏览器选项 通过 Selenium 控制无头浏览器访问酷狗音乐网站并加载动态内容。配置如下: ```python from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_argument("--headless") # 配置为无头模式 driver = webdriver.Chrome(options=chrome_options) ``` 此部分代码用于初始化一个无头浏览器实例[^1]。 #### 3. 构造 URL 并遍历页面 根据引用描述,酷狗音乐 TOP500 列表分为多个子页面,每页显示 22 首歌曲,总共需要遍历 23 个页面。可以通过字符串格式化构造各页面的 URL 地址: ```python base_url = "https://www.kugou.com/yy/rank/home/{}-8888.html" for page_num in range(1, 24): # 页面编号从1到23 url = base_url.format(page_num) driver.get(url) html_content = driver.page_source ``` 上述代码实现了对每个页面的逐一访问,并获取其 HTML 源码[^2]。 #### 4. 解析 HTML 数据 利用 BeautifulSoup 对 HTML 进行解析,提取所需的信息(如歌曲名、歌手名等)。示例如下: ```python from bs4 import BeautifulSoup soup = BeautifulSoup(html_content, 'html.parser') song_list = soup.find_all('li', class_='pc_temp_songlist') # 查找包含歌曲信息的部分 songs_info = [] for song_item in song_list: title = song_item.find('span', class_='pc_temp_songname').text.strip() # 歌曲名称 singer = song_item.find('span', class_='pc_temp_singer').text.strip() # 歌手名称 songs_info.append({'title': title, 'singer': singer}) ``` 这里展示了如何定位特定标签及其属性以提取歌曲的相关字段。 #### 5. 存储结果至文件 最后可将收集到的数据保存成 JSON 或 CSV 文件以便后续分析处理: ```python import json with open('kugou_top500.json', 'w', encoding='utf-8') as f: json.dump(songs_info, f, ensure_ascii=False, indent=4) print("数据已成功写入 kugou_top500.json") ``` 以上即完成了整个流程的设计与实施说明。 ---
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值