Python爬虫与数据图表的实现

Posted 午夜的行人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python爬虫与数据图表的实现相关的知识,希望对你有一定的参考价值。

要求:

1. 参考教材实例20,编写Python爬虫程序,获取江西省所有高校的大学排名数据记录,并打印输出。

2. 使用numpy和matplotlib等库分析数据,并绘制南昌大学、华东交通大学、江西理工大学三个高校的总分排名、生源质量(新生高考成绩得分)、培养结果(毕业生就业率)、顶尖成果(高被引论文·篇)等四个指标构成的多指标柱形图。

3. 对江西各高校的顶尖成果(高被引论文数量)进行分析,使用matplotlib绘制各高校顶尖成果数构成的饼状图,并突出江西理工大学所在的饼状块。

实例代码:

import requests
from bs4 import BeautifulSoup
import numpy as np
import matplotlib.pyplot as plt

allUniv = []
def getHTMLText(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()
        r.encoding = \'utf-8\'
        return r.text
    except:
        return ""

def fillUnivList(soup):
    data = soup.find_all(\'tr\')
    for tr in data:
        ltd = tr.find_all(\'td\')
        if len(ltd) == 0:
            continue
        singleUniv = []
        for td in ltd:
            singleUniv.append(td.string)
        allUniv.append(singleUniv)
    return len(allUniv)

def printUnivList(num):
    print("{0:^4}\\t{1:^20}\\t{2:^5}\\t{3:^8}\\t{4:^8}\\t{5:^8}\\t{6:^8}".format("排名", "学校名称", "省市", "总分", "生源质量", "培养结果", "顶尖成果"))
    for i in range(num):
        u = allUniv[i]
        if u[2] == "江西":
            print("{0:^4}\\t{1:^20}\\t{2:^5}\\t{3:^8}\\t{4:^8}\\t{5:^8}\\t{6:^8}".format(u[0], u[1], u[2], u[3], str(u[4]), str(u[5]), str(u[9])))

def drawBarChart(num):
    jxlg = []
    ncdx = []
    hdjd = []
    for i in range(num):
        u = allUniv[i]
        if u[1] == "江西理工大学":
            jxlg.append(float(u[3]))
            jxlg.append(float(u[4]))
            jxlg.append(float(str(u[5]).replace(\'%\', \'\')))
            jxlg.append(float(u[9]))
        if u[1] == "南昌大学":
            ncdx.append(float(u[3]))
            ncdx.append(float(u[4]))
            ncdx.append(float(str(u[5]).replace(\'%\', \'\')))
            ncdx.append(float(u[9]))
        if u[1] == "华东交通大学":
            hdjd.append(float(u[3]))
            hdjd.append(float(u[4]))
            hdjd.append(float(str(u[5]).replace(\'%\', \'\')))
            hdjd.append(float(u[9]))
    name_list = [\'总分\', \'生源质量\', \'培养结果\', "顶尖成果"]
    x = list(range(len(name_list)))
    total_width, n = 0.8, 4
    width = total_width / n
    fig, ax = plt.subplots()
    plt.rcParams[\'font.sans-serif\'] = \'SimHei\'
    plt.bar(x, jxlg, width=width, label=\'江西理工大学\', tick_label=name_list, fc=\'r\')
    for i in range(len(x)):
        x[i] = x[i] + width
    plt.bar(x, ncdx, width=width, label=\'南昌大学\', fc=\'y\')
    for i in range(len(x)):
        x[i] = x[i] + width
    plt.bar(x, hdjd, width=width, label=\'华东交通大学\', fc=\'b\')
    # plt.xticks(np.arange(len(name_list)))
    plt.legend()
    plt.show()

def drawBar(num):
    djcg = []
    name = []
    explode = []
    for i in range(num):
        u = allUniv[i]
        if u[2] == "江西":
            djcg.append(u[9])
            name.append(u[1])
            if u[1] == "江西理工大学":
                explode.append(0.5)
            else:
                explode.append(0)
    plt.rcParams[\'font.sans-serif\'] = \'SimHei\'
    fig1, ax1 = plt.subplots()
    ax1.pie(djcg, explode=explode, labels=name, autopct=\'%1.1f%%\',
            shadow=True, startangle=90)
    ax1.axis(\'equal\')
    plt.legend()
    plt.show()

def main():
    url = "http://www.zuihaodaxue.com/zuihaodaxuepaiming2018.html"
    html = getHTMLText(url)
    soup = BeautifulSoup(html, "html.parser")
    num = fillUnivList(soup)
    printUnivList(num)
    drawBarChart(num)
    drawBar(num)

if __name__ == \'__main__\':
    main()

 

江西省高校排名结果如下:

 

三校部分数据对比如下:

 

江西各高校的顶尖成果(高被引论文数量)对比分析如下:

 

以上是关于Python爬虫与数据图表的实现的主要内容,如果未能解决你的问题,请参考以下文章

scrapy主动退出爬虫的代码片段(python3)

拉勾网爬虫Python代码实现

基于Python的招聘网站爬虫及可视化的设计与实现

爬虫毕设:数据可视化

爬虫毕设:数据可视化

python爬虫爬取人人车(二手车)利用padasmatplotlib生成图表