Python高级应用程序设计任务要求

一、主题式网络爬虫设计方案(15分)

1.主题式网络爬虫名称

网易云歌曲排行榜歌曲时长


2.主题式网络爬虫爬取的内容与数据特征分析

主要是爬取网易云里面的歌名,歌手和歌曲时长。

对网易云歌曲的时长做一个可视化表格。

 

3.主题式网络爬虫设计方案概述(包括实现思路与技术难点)

实现思路:利用requests的get方法访问网站。

                  用xpath方法解析网页原码。

技术难点:需要下载最新版本的谷歌,还需要安装谷歌的驱动否则运行不出来。

二、主题页面的结构特征分析(15分)
1.主题页面的结构特征

Python高级应用程序设计任务要求_第1张图片

 

 


2.Htmls页面解析

Python高级应用程序设计任务要求_第2张图片

 

 


3.节点(标签)查找方法与遍历方法
(必要时画出节点树结构)

根据F12中的数据查找到相应位置并requests.get(),再利用正则找到正确的数据并保存起来

三、网络爬虫程序设计(60分)
爬虫程序主体要包括以下各部分,要附源代码及较详细注释,并在每部分程序后面提供输出结果的截图。
1.数据爬取与采集

爬取的代码如下:

from lxml import etree
from selenium import webdriver
import pandas as pd
class WangyiMusic():
    # 请求的地址 云音乐飙升榜
    url = "https://music.163.com/#/discover/toplist?id=19723756"

    def __init__(self):
        #选择浏览器驱动 chromedriver.exe
        self.browser = webdriver.Chrome(executable_path="D:\python\chromedriver.exe")
        if self.get_HTML():
            self.parse_HTML()

    #由于页面的歌曲信息都存放在页面的ifram里面,所以采用Selenium进入子页面获得源码
    def get_HTML(self):
        #使用get方法访问网站
        self.browser.get(self.url)
        self.browser.switch_to_frame('contentFrame')
        iframe = self.browser.page_source
        return iframe
    
    #用xpath方法解析网页原码
    def parse_HTML(self):
        iframe = self.get_HTML()
        html = etree.HTML(iframe)

        try:
            #获取排名
            num = html.xpath('//td/div/span[@class = "num"]/text()')
            #获取歌名
            song = html.xpath('//td//div/span[@class="txt"]/a/b/@title')
            #获取歌手
            singer = html.xpath('//td/div[@class = "text"]/@title')
            #获取歌曲时长
            time = html.xpath('//td[@class = " s-fc3"]/span[@class = "u-dur "]/text()')            
            #DataFrame列名
            columns_list = ['歌名','歌手','时长']
            #将歌名、歌手和时长用zip函数转换成一个列表数据类型
            data = list(zip(song,singer,time))
            #用排名做行索引
            index_list = num
            #转换成DataFram数据
            dataFrame = pd.DataFrame(data,index = index_list,columns = columns_list)
            #避免多次运行爬取,将数据存入csv文件中,做后续的数据分析
            dataFrame.to_csv(".wangyiMusic.csv")
            return dataFrame
        except Exception as e:
            print('解析失败!',e.args)

object = WangyiMusic()
print(object.parse_HTML())

运行结果如下:

Python高级应用程序设计任务要求_第3张图片

 

2.对数据进行清洗和处理

#输出网易云数据文件的前5行
data=pd.DataFrame(pd.read_csv('./wangyiMusic.csv'))
data.head()

Python高级应用程序设计任务要求_第4张图片

#删除无效列
data.drop(1,axis=0,inplace=True)
data.head()

 

Python高级应用程序设计任务要求_第5张图片

 

 

#查找重复值
data.duplicated()

 

Python高级应用程序设计任务要求_第6张图片

 

 

#删除重复值
data=data.drop_duplicates()
data.head()

 

Python高级应用程序设计任务要求_第7张图片

 

 

#空值处理
data['歌名'].isnull().value_counts()

 

 

#异常值处理
data.describe()

 

Python高级应用程序设计任务要求_第8张图片

 

3.文本分析(可选):jieba分词、wordcloud可视化


4.数据分析与可视化
(例如:数据柱形图、直方图、散点图、盒图、分布图、数据回归分析等)

 

 

Python高级应用程序设计任务要求_第9张图片

 

 

 

Python高级应用程序设计任务要求_第10张图片

 

 

Python高级应用程序设计任务要求_第11张图片

 

 

 

 

Python高级应用程序设计任务要求_第12张图片

 

 

 

Python高级应用程序设计任务要求_第13张图片

 

5.数据持久化

 

Python高级应用程序设计任务要求_第14张图片

 

 


6.附完整程序代码

from lxml import etree
from selenium import webdriver
import pandas as pd
class WangyiMusic():
    # 请求的地址 云音乐飙升榜
    url = "https://music.163.com/#/discover/toplist?id=19723756"

    def __init__(self):
        #选择浏览器驱动 chromedriver.exe
        self.browser = webdriver.Chrome(executable_path="D:\python\chromedriver.exe")
        if self.get_HTML():
            self.parse_HTML()

    #由于页面的歌曲信息都存放在页面的ifram里面,所以采用Selenium进入子页面获得源码
    def get_HTML(self):
        #使用get方法访问网站
        self.browser.get(self.url)
        self.browser.switch_to_frame('contentFrame')
        iframe = self.browser.page_source
        return iframe
    
    #用xpath方法解析网页原码
    def parse_HTML(self):
        iframe = self.get_HTML()
        html = etree.HTML(iframe)

        try:
            #获取排名
            num = html.xpath('//td/div/span[@class = "num"]/text()')
            #获取歌名
            song = html.xpath('//td//div/span[@class="txt"]/a/b/@title')
            #获取歌手
            singer = html.xpath('//td/div[@class = "text"]/@title')
            #获取歌曲时长
            time = html.xpath('//td[@class = " s-fc3"]/span[@class = "u-dur "]/text()')            
            #DataFrame列名
            columns_list = ['歌名','歌手','时长']
            #将歌名、歌手和时长用zip函数转换成一个列表数据类型
            data = list(zip(song,singer,time))
            #用排名做行索引
            index_list = num
            #转换成DataFram数据
            dataFrame = pd.DataFrame(data,index = index_list,columns = columns_list)
            #避免多次运行爬取,将数据存入csv文件中,做后续的数据分析
            dataFrame.to_csv(".wangyiMusic.csv")
            return dataFrame
        except Exception as e:
            print('解析失败!',e.args)

object = WangyiMusic()
print(object.parse_HTML())

  

四、结论(10分)
1.经过对主题数据的分析与可视化,可以得到哪些结论?

 结论:

大部分的歌曲时长都集中在3-4分钟之间。

隔壁老樊,小鬼和华晨宇等歌手比较受听众喜爱。

2.对本次程序设计任务完成的情况做一个简单的小结。

由于自己知识的缺乏在进行实操出现各种各样的错误,不断翻阅书籍才补缺补漏将代码写好。这次的作业让我python更进一步的了解也更加深了我的知识,是一次很好的学习过程。

你可能感兴趣的:(Python高级应用程序设计任务要求)