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

Posted 林丹

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python高级应用程序设计任务要求相关的知识,希望对你有一定的参考价值。

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


用Python实现一个面向主题的网络爬虫程序,并完成以下内容:
(注:每人一题,主题内容自选,所有设计内容与源代码需提交到博客园平台)

一、主题式网络爬虫设计方案(15分)
1.主题式网络爬虫名称
 
    名称:爬取虎牙直播视频播放量

2.主题式网络爬虫爬取的内容与数据特征分析
 
   内容:本次爬虫主要爬取虎牙有关王者荣耀直播页的视频标题、主播名字、视频播放量等相关信息。

3.主题式网络爬虫设计方案概述(包括实现思路与技术难点)
 
实现思路:本案使用requests库爬取目标页面HTML代码,然后使用beautifulSoup库解析页面内容提取目标信息,最后利用pandas将数据存储,读取,再打印出来。

技术难点:1.爬取数据提取相关信息  2.遍历过程  3.保存数据至excel表格 

 

二、主题页面的结构特征分析(15分)
1.主题页面的结构特征
 
  https://www.huya.com/g/wzry
 
主题页面视频信息主要包括了推荐视频,以及视频标题、主播名字、视频播放量等内容
 

2.Htmls页面解析
 

标题信息在class="title new-clickstat"<a>标签中;

主播名在class="nick"<i>标签中;

播放量在class="js-num"<i>标签中。


3.节点(标签)查找方法与遍历方法
(必要时画出节点树结构)
 
使用find_all()方法进行遍历查找
再用for循环嵌套

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

1.数据爬取与采集
 
#爬取虎牙直播视频:王者荣耀 目标的HTML页面
def getHTMLText(url):
    try:
        #获取目标页面
        r = requests.get(url)
        #判断页面是否链接成功
        r.raise_for_status()
        #使用HTML页面内容中分析出的响应内容编码方式
        r.encoding = r.apparent_encoding
        #返回页面内容
        return r.text
    except:
        #如果爬取失败,返回“爬取失败”
        return "爬取失败"
  
#获取目标信息
def getData(titleList,nameList,numList,html):
    #创建BeautifulSoup对象
    soup = BeautifulSoup(html,"html.parser")
    #获取标题信息
    for a in soup.find_all("a",{"class":"title new-clickstat"}):
        #将标题信息存在列表中
        titleList.append(a.string)
    #获取主播名字信息
    for i in soup.find_all("i",{"class":"nick"}):
        #将主播名字存在列表中
        nameList.append(i.string)
    #获取播放量
    for i in soup.find_all("i",{"class":"js-num"}):
        #将播放量存在列表中
        numList.append(i.string)
#创建文件夹
def makeMkdir():
    try:
         #创建文件夹
        os.mkdir("C:\\虎牙直播")
    except:
        #如果文件夹存在则什么也不做
        ""
    

2.对数据进行清洗和处理
#获取目标信息
def getData(titleList,nameList,numList,html):
    #创建BeautifulSoup对象
    soup = BeautifulSoup(html,"html.parser")
    #获取标题信息
    for a in soup.find_all("a",{"class":"title new-clickstat"}):
        #将标题信息存在列表中
        titleList.append(a.string)
    #获取主播名字信息
    for i in soup.find_all("i",{"class":"nick"}):
        #将主播名字存在列表中
        nameList.append(i.string)
    #获取播放量
    for i in soup.find_all("i",{"class":"js-num"}):
        #将播放量存在列表中
        numList.append(i.string)
        

 


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

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

import numpy as np 

#excel表格对应序列号 ,主播视频播放量
s=pd.Series([487.7,260.9,253.0,185.1,167.6,164.2,163.7,6.8,5.3,5.8],[\'0\',\'1\',\'2\',\'3\',\'4\',\'5\',\'6;,\'7\',\'8\',\'9\']

s.plot(kinf=\'bar\',title=\'wangzherongyao\')

plt.show

 


 5.数据持久化
#使用pandas进行数据存储、读取
def pdSaveRead(titleList,nameList,numList):
    #创建numpy数组
    r = np.array([titleList,nameList,numList])
    #columns(列)名
    columns_title = [\'标题\',\'主播\',\'播放量\']
    #创建DataFrame数据帧
    df = pd.DataFrame(r.T,columns = columns_title)
    #将数据存在Excel表中
    df.to_excel(r\'C:\\虎牙直播\\王者荣耀.xls\',columns = columns_title)
    
    #读取表中岗位信息
    dfr = pd.read_excel(r\'C:\\虎牙直播\\王者荣耀.xls\')
    print(dfr.head()) 


#用来存放标题的列表
titleList = []
#用来存放主播名字的列表
nameList = []
#用来存放播放量的列表
numList = []
#英雄联盟页面链接
url = "https://www.huya.com/g/wzry"
#获取页面html代码
html = getHTMLText(url)
#将目标信息存在目标列表中
getData(titleList,nameList,numList,html)
#创建文件夹


makeMkdir()
#数据存储并打印数据
pdSaveRead(titleList,nameList,numList)

 6.附完整程序代码
 1 import requests
 2 from bs4 import BeautifulSoup
 3 import pandas as pd
 4 import numpy as np
 5 import os
 6 
 7 
 8 #爬取虎牙直播视频:王者荣耀 目标的HTML页面
 9 def getHTMLText(url):
10     try:
11         #获取目标页面
12         r = requests.get(url)
13         #判断页面是否链接成功
14         r.raise_for_status()
15         #使用HTML页面内容中分析出的响应内容编码方式
16         r.encoding = r.apparent_encoding
17         #返回页面内容
18         return r.text
19     except:
20         #如果爬取失败,返回“爬取失败”
21         return "爬取失败"
22   
23 #获取目标信息
24 def getData(titleList,nameList,numList,html):
25     #创建BeautifulSoup对象
26     soup = BeautifulSoup(html,"html.parser")
27     #获取标题信息
28     for a in soup.find_all("a",{"class":"title new-clickstat"}):
29         #将标题信息存在列表中
30         titleList.append(a.string)
31     #获取主播名字信息
32     for i in soup.find_all("i",{"class":"nick"}):
33         #将主播名字存在列表中
34         nameList.append(i.string)
35     #获取播放量
36     for i in soup.find_all("i",{"class":"js-num"}):
37         #将播放量存在列表中
38         numList.append(i.string)
39         
40 #创建文件夹
41 def makeMkdir():
42     try:
43          #创建文件夹
44         os.mkdir("C:\\虎牙直播")
45     except:
46         #如果文件夹存在则什么也不做
47         ""
48     
49  #使用pandas进行数据存储、读取
50 def pdSaveRead(titleList,nameList,numList):
51     #创建numpy数组
52     r = np.array([titleList,nameList,numList])
53     #columns(列)名
54     columns_title = [\'标题\',\'主播\',\'播放量\']
55     #创建DataFrame数据帧
56     df = pd.DataFrame(r.T,columns = columns_title)
57     #将数据存在Excel表中
58     df.to_excel(r\'C:\\虎牙直播\\王者荣耀.xls\',columns = columns_title)
59     
60     #读取表中岗位信息
61     dfr = pd.read_excel(r\'C:\\虎牙直播\\王者荣耀.xls\')
62     print(dfr.head()) 
63 
64 
65 #用来存放标题的列表
66 titleList = []
67 #用来存放主播名字的列表
68 nameList = []
69 #用来存放播放量的列表
70 numList = []
71 #英雄联盟页面链接
72 url = "https://www.huya.com/g/wzry"
73 #获取页面html代码
74 html = getHTMLText(url)
75 #将目标信息存在目标列表中
76 getData(titleList,nameList,numList,html)
77 #创建文件夹
78 
79 
80 makeMkdir()
81 #数据存储并打印数据
82 pdSaveRead(titleList,nameList,numList)

 

四、结论(10分)
1.经过对主题数据的分析与可视化,可以得到哪些结论?
  ① 虎牙直播视频主播播放量的大小来看,差异明显,知名主播播放量会更高。
  ② 虎牙直播视频中王者荣耀板块的播放量还是很大的。
  ③ 虎牙直播视频对于播放量较高及播放量较低都会列于推荐视频中。
 
2.对本次程序设计任务完成的情况做一个简单的小结。
 
本次课程进行了平台的修改,哔哩哔哩视频总量大,方向也没做好选择,爬虫的难度也就加大了。终与组员商量一同改为虎牙直播视频爬虫,方向设为王者荣耀板块。在爬虫过程中有遇到了一些难题,通过网络查找及自主学习的过程中解决了一部分。对爬虫有了更深的了解,也加深了自己对于requests库、beautifulSoup库的使用,但然需要加强。因为初次进行实操性爬虫,有存在不足,还需要多多学习和加强。总之,这一次的网络爬虫让我更加的了解,也激发了对此的兴趣,希望之后还可以多操作运行。

 

 
 
 
 

以上是关于Python高级应用程序设计任务要求的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

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

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