爬取最好大学网数据、分析并可视化操作

爬虫爬取数据、分析并可视化操作

本次对最好大学网进行爬虫示例。

1.获取网页响应

def getHTMLText(url):
    try:
        resp = request.urlopen(url)
        html_data = resp.read().decode('utf-8')
        return html_data
    except:
        return ""

通过request来获取网页的信息。

2.进行对网页信息的处理

def fillUnivList(ulist, html):
   soup = BeautifulSoup(html, "html.parser")
   for tr in soup.find('tbody').children:  # 搜索'tbody'后面的子节点
       if isinstance(tr, bs4.element.Tag):
           tds = tr('td')
           ulist.append([tds[0].string, tds[1].string,tds[2].string, tds[3].string])

使用bs4对网页信息进行处理,并以数组形式存储。

def printUnivList(ulist, num):
  tplt = "{0:^10}\t{1:{4}^10}\t{2:^10}\t{3:^10}"
  print(tplt.format("rank", "sn", "area",'grade', chr(12288)))
  for i in range(num):
      u = ulist[i]
      print(tplt.format(u[0], u[1], u[2],u[3], chr(12288)))

这里对所获得信息进行输出检验,用tplt存放输出 格式的定义;其中^表示居中对齐,10表示按10个字符的长度输出。长度不够补空格,{4}表示使用format函数的第四个变量进行填充,即使用中文的空格进行填充。 chr(12288)表示按中文的习惯进行填充空格,为了输出对齐的约束

3.存储网页信息至csv文件

for i in range(100):
  			fieldnames = ["rank", "sn", "area",'grade']
  			a = dict(zip(fieldnames, uinfo[i]))
  			write_to_file(a)
  	def write_to_file(items):
  			 with open('save.csv','a',encoding='utf_8_sig')as f:
       			fieldnames = ["rank", "sn", "area",'grade']
       			w = csv.DictWriter(f, fieldnames=fieldnames)
       			w.writerow(items)

由于爬取数据时,数据类型为数组,为方便后续得到可视化操作,在存储数据前,将数组转化为字典格式存储。

4.可视化操作

根据成绩排名表:

    df_grade= df.sort_values('grade',ascending=False)#asc False降序,True升序: desc
   		sn1 = df_grade.sn[:10] #X轴坐标
   		grade1 = df_grade.grade[:10]#Y轴坐标
   		plt.bar(range(10),grade1,tick_label=sn1) #绘制条形图,用range()能保持X轴顺序一致
   		plt.ylim(0,100)
   		plt.title("学校评分Top10",color=colors1)
   		plt.xlabel('学校名称')
   		plt.ylabel('评分')
#标记数值
   		for x,y in enumerate(list(grade1)):
  				 plt.text(x,y+0.01,'%s' %round(y,1),ha='center',color=colors1)
   pass

根据大学数量对地区排名:

area_count = df.groupby(by='area').area.count().sort_values(ascending=False)

其余可根据成绩排名表改。

5.结果

爬取最好大学网数据、分析并可视化操作_第1张图片
从大学分数排名图中,我们可以看出,在前十的国内大学中,清华大学相较于其他大学评分遥遥领先。
爬取最好大学网数据、分析并可视化操作_第2张图片
从各地大学数量图中,我们可以看到国内前百大学中,北京的大学占比最高,江苏其次,然后是上海,甘肃最少。从中可以反映出北京的高端教育水平较高。

你可能感兴趣的:(python)