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

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

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

1.主题式网络爬虫名称

NBA球员勒布朗詹姆斯生涯表现
2.主题式网络爬虫爬取的内容与数据特征分析

NBA球员勒布朗詹姆斯生涯信息进行爬取分析
3.主题式网络爬虫设计方案概述(包括实现思路与技术难点)

获取NBA球员勒布朗詹姆斯生涯信息,提取其中的赛况数据与比分累计。设计方案主要靠requests库结合beautifulsoup进行数据解析。技术难点主要是怎么对获取的信息做可视图分析。

技术路线:requests beautifulsoup

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

https://nba.hupu.com/players/lebronjames-650.html

 

2.Htmls页面解析

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

 

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

首先,通过request获取到整个页面的数据

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

 

 

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

 

通过 devTool工具可以分析网页,找到对应的标签属性

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

 

table.players_table.bott.bgs_table 可以获取到整个表格

 

在属性一样的情况下,想要取出生涯数据,必须过滤掉第一个tr标签,才是我们想要的数据!

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

三、 网络爬虫程序设计(60分)
爬虫程序主体要包括以下各部分,要附源代码及较详细注释,并在每部分程序后面提供输出结果的截图。
1.数据爬取与采集
2.对数据进行清洗和处理
3.文本分析(可选):jieba分词、wordcloud可视化
4.数据分析与可视化
(例如:数据柱形图、直方图、散点图、盒图、分布图、数据回归分析等)

程序代码:

 

# -*- coding: utf-8 -*-

import requests
from bs4 import BeautifulSoup
import pandas as pd

list1 = [] #数据数组
list2 = []  # 数据数组

def gethtmltext(url):
    #获取网页数据
    try:
        r = requests.get(url)
        r.raise_for_status()
        return r.text
    except:

        return "打不开"


def getdata(html,list1,list2):
    newlist = []
    # 解析源码
    soup = BeautifulSoup(html, "html.parser")

    #选择器
    tables = soup.select("table.players_table.bott.bgs_table > tbody > tr.color_font1.borders_btm")

    #循环取出每组数据
    for table in tables:

        datas = table.get_text().split('\n')

        #去掉数据里的空元素
        for i in datas:
            if len(i) == 0:
                datas.remove(i)
        # print(datas)
        #加入数据组
        newlist.append(datas)

    for i in range(0,31):
        list2.append(newlist[i])
    for i in range(31, len(newlist)):
        list1.append(newlist[i])

    print(list2)
    print(list1)
    return newlist


# 将这个赛季信息保存到excel文件中
def writerExcel1(path1,list1):
    writer = pd.ExcelWriter(path1)
    pf = pd.DataFrame(list1)
    pf.to_excel(writer)
    writer.save()

# 将赛季信息保存到excel文件中
def writerExcel2(path2, list2):
    writer = pd.ExcelWriter(path2)
    pf = pd.DataFrame(list2)
    pf.to_excel(writer)
    writer.save()

# 将数据保存到txt文件中
def writerTxt(list1):
    #保存数据
    fo = open("basketball.txt", "w+")
    #循环取出每组数据
    for datas in list1:
        #内循环单数据
        for i in datas:
            fo.writelines(i + " ")
        #大循环换行
        fo.writelines("\n")
    fo.close()
    
newlist = []

html = gethtmltext("https://nba.hupu.com/players/lebronjames-650.html")

newlist = getdata(html,list1,list2)

writerTxt(newlist)

writerExcel1("basketball1.xlsx", list1)

writerExcel2("basketball2.xlsx", list2)

 

运行结果:

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

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

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

使用split函数切割文本,以换行符为特征,产生单数据组。

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

保存数据:

 fo = open("data.txt", "w+")
    #循环取出每组数据
    for datas in list:
        #内循环单数据
        for i in datas:
            fo.writelines(i + " ")
        #大循环换行
        fo.writelines("\n")
    fo.close()

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

 

结果图:

 

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

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

数据可视化

代码:

basketball1 = pd.read_excel("basketball1.xlsx")

print(basketball1.head(3))

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

basketball2 = pd.read_excel("basketball2.xlsx")

print(basketball2.head(3))

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

# 画出时间和篮板之间的散点图

sns.set(style="white")

sns.scatterplot(x="时间",y='篮板',data = basketball1)

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

# 显示篮板次数和赛季的箱型图

sns.boxplot(x='篮板',y='赛季', data=basketball1)

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

# 直方图查看basketball1中得分分布

sns.distplot(basketball1['得分'])

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

# 统计这个赛季各球队出场次数

sns.countplot(basketball1['球队'])

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

 

1.经过对数据的分析和可视化,可以得出哪些结论

可以看出詹姆斯各方面的数据都是非常顶尖的。

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

可能由于自己对课程的了解还不是非常深入,所以在pythono爬虫的时候遇到的困难比较多,自己在上网和看视频学习了很多之后才完成了这个题目,可能这个项目完成的不是很好希望以后通过努力能做的更好。

 

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