首页 > 编程语言 >【python爬虫案例】利用python爬取豆瓣音乐评分TOP250的排行数据!

【python爬虫案例】利用python爬取豆瓣音乐评分TOP250的排行数据!

时间:2024-10-14 16:01:19浏览次数:8  
标签:python 爬虫 爬取 豆瓣 csv TOP250

一、爬取案例-豆瓣音乐TOP250

之前给大家分享了2个豆瓣的python爬虫案例:

【python爬虫案例】利用python爬虫爬取豆瓣电影评分TOP250排行数据!

【python爬虫案例】利用python爬虫爬取豆瓣读书评分TOP250的排行数据!

 

今天再给大家分享一下:豆瓣音乐排行榜TOP250的python爬虫案例!

爬虫的流程和逻辑上都和之前分享过的2篇文章差不多

这次爬取的目标网址是:https://music.douban.com/top250

老规矩!咱们以目标为驱动,先来看下爬虫爬取成功后得到的csv文档数据

那代码是如何实现豆瓣音乐TOP250数据爬取的了?下面逐一讲解一下python实现。

二、豆瓣音乐TOP250网站分析

通过浏览器F12查看所有请求,发现他并没有发送ajax请求,那说明我们要的TOP250的排行榜数据大概率是在html页面内容上。

于是我们 点击右键->查看网页源代码 ,发现我们需要的豆瓣音乐评分的排行榜数据都在html页面里

这就简单了,我们直接往下看,上代码。

三、python爬虫代码详解

首先,导入我们需要用到的库

import requests     # 发请求
from lxml import etree  # 解析html
import pandas as pd  # 存取csv

然后,向豆瓣音乐TOP250的网页发起请求,获得html页面内容

page_source = requests.get(page_url, headers=headers).text

用lxml库解析html页面

tree = etree.HTML(page_source)

使用xpath来提取我们需要的音乐排行榜数据内容

# 获得数据所在的标签
tables = tree.xpath("//div[@class='indent']/table")

# 循环标签获得音乐信息
for table in tables:
    pl2 = table.xpath(".//div[@class='pl2']")[0]

    # 抓取数据
    url = extract_first(pl2.xpath("./a/@href"))     # 专辑链接
    music_name = extract_first(pl2.xpath("./a/text()"))     # 专辑名称
    score = extract_first(pl2.xpath(".//span[@class='rating_nums']/text()"))    # 评分
    score_people_num = extract_first(pl2.xpath(".//span[@class='pl']/text()"))
    score_people_num = re.search("\d+", score_people_num).group()   # 评分人数

    info_text = extract_first(pl2.xpath("//p[@class='pl']/text()"))
    infos = info_text.split("/")
    singer = infos[0].strip()  # 歌手
    publish_date = infos[1].strip() # 发行日期
    type = infos[2].strip()     # 类型
    media = infos[3].strip()    # 介质
    style = infos[4].strip()     # 曲风

最后,我们将爬虫爬取的数据保存到csv文档里

def save_to_csv(csv_name):
    """
    数据保存到csv
    @param csv_name: csv文件名字
    @return:
    """
    df = pd.DataFrame()  # 初始化一个DataFrame对象
    df['专辑名称'] = music_names
    df['专辑链接'] = urls
    df['歌手'] = singers
    df['评分'] = scores
    df['评分人数'] = score_people_nums
    df['发行日期'] = publish_dates
    df['类型'] = types
    df['介质'] = medias
    df['曲风'] = styles
    df.to_csv(csv_name, encoding='utf8', index=False)  # 将数据保存到csv文件

上面的music_names、urls等变量都是使用的list来进行存储的,这样才能符合pandas导出数据时的需要,然后调用to_csv()方法保存即可。

这样,爬取的豆瓣音乐排行榜数据就持久化保存到我们的文档里了。

需要注意的是!豆瓣页面上第4、5、6页只有24首(不是25首)音乐,所以总数量是247,不是250。
不是爬虫代码有问题,是豆瓣页面上就只有247条数据。

四、python爬虫源代码获取

我是@王哪跑,持续分享python干货,各类副业技巧及软件!

附完整python源码及csv表格数据:【python爬虫案例】利用python爬取豆瓣音乐评分TOP250的排行数据

标签:python,爬虫,爬取,豆瓣,csv,TOP250
From: https://www.cnblogs.com/wangnp/p/18464342

相关文章

  • Python学习方式有哪些?
    目前,市面上从事Python培训的机构有很多,五花八门、规模不一,且教学质量也存在很大的差异,培训方式更是各有千秋,那么Python培训班都有哪些学习方式?我们通过这篇文章来看看吧。1、Python面授培训班面授班也叫做脱产班,是最为常见的一种Python培训方式,通过线下脱产的方式学习......
  • 按键精灵脚本转python
    importreimportpyautoguiimporttime#定义映射关系command_map={'MoveTo':'pyautogui.moveTo','LeftClick':'pyautogui.click','LeftDown':'pyautogui.mouseDown','LeftUp'......
  • 按键精灵转python脚本中文输入的问题以及解决办法
    在使用pyautogui进行自动化操作时,如果你想在指定位置输入中文,可能会遇到一些问题,因为pyautogui本身并不直接支持输入非英文字符。不过,你可以通过结合其他库(如pyperclip)来实现输入中文。以下是一个示例代码,展示了如何在指定位置输入中文:importpyautoguiimportpyperclip......
  • Python - 正则表达式转义注意事项
    无论哪种语言,在使用正则表达式的时候都避免不了一个问题,就是在匹配元字符的时候,需要对元字符进行转义,让正则表达式引擎将其当做普通字符来匹配。本文主要以python为例,说明一下转义中需要注意的问题。python的正则表达式中需要转义的元字符有以下几个:.^$*+?\\[]|{}()......
  • 38个Python游戏开发库
    1PyGame官网:https://www.pygame.org/docs/概述:Pygame是一组专为编写视频游戏而设计的Python模块。它在优秀的SDL库之上添加了功能。这允许您使用python语言创建功能齐全的游戏和多媒体程序。Pygame具有高度的可移植性,可以在几乎所有平台和操作系统上运行。拓展:对Py......
  • 32个Python图形化界面库
    1wxPython官网:https://wxpython.org/pages/overview/ 概述:wxPython是一个用C++编写的适用于Python的跨平台GUI工具包,它让Python程序员们能够简单、轻松地创建功能强大的图形用户界面的程序。它目前支持的平台包括MicrosoftWindows、MacOSX和macOS,以及Linux或其他具有GT......
  • 【python爬虫案例】利用python爬取B站TOP100热门排行榜附源码
    目录一、爬取目标-B站排行榜二、B站排行榜网站分析三、B站排行榜爬虫代码详解四、B站排行榜结果五、python爬虫源代码获取一、爬取目标-B站排行榜大家好,我是老王!今天给大家分享一期python爬虫案例,这次爬取的对象是:B站热门排行榜数据爬取的目标网址是:https://www.bil......
  • Java与Python的角斗 动画动漫下载 猫和老鼠 爆笑虫子 微观小世界 及时保存以防失效
    在“代码王国”的金色大厅内,一场前所未有的角斗即将拉开序幕。大厅四周镶嵌着由各种算法构成的璀璨宝石,每一颗都闪烁着智慧的光芒,映照着即将上演的较量。爆笑虫子第一季104集合集 第一季1-104.mp4https://www.alipan.com/s/4nLKc6NWdG7提取码:12or点击链接保存,或者复制......
  • python中多线程和多进程的区别
    希望在1分钟内完成500架无人机的路径规划任务,而目前A*算法在50架无人机的情况下需要10秒,意味着在不做优化的情况下处理500架无人机将需要大约100秒,超出你的指标要求。提升计算速度是关键。多线程和多进程是常用的加速方案,但它们在Python中的效果存在差异1、多线程Python的标准......
  • python3 log工具
    python3log工具logutil.py#-*-coding:utf-8-*-importos,sys,tracebackimportloggingfromlogging.handlersimportRotatingFileHandlerimportgetpassdefsingleton(cls):instances={}defget_instance():ifclsnotininstances:......