当前位置: 首页 > 科技观察

Python爬取TIOBE编程语言近十年热度数据并可视化

时间:2023-03-11 23:42:25 科技观察

本文介绍如何使用requests+正则表达式爬取TIOBE编程语言热度数据,并使用👉播放图表以进行可视化。1、数据获取我们需要爬取的目标url为https://www.tiobe.com/tiobe-index/打开后如下👇分析网页源代码,找到想要的数据,使用正则表达式提取想要的数据,保存到Excel中,用于后续的数据处理和可视化。完整的爬虫代码如下,大部分语句都给出了详细的注释,有兴趣的读者可以进一步研究。#-*-coding:UTF-8-*-"""@文件:spider.py@作者:叶听云@CSDN:https://yetingyun.blog.csdn.net/"""importrequestsimportreimportopenpyxlimportlogginglogging.basicConfig(level=记录.INFO,format='%(asctime)s-%(levelname)s:%(message)s')headers={"User-Agent":"Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.1(KHTML,likeGecko)Chrome/21.0.1180.89Safari/537.1"}wb=openpyxl.Workbook()#创建工作簿对象sheet=wb.active#获取活动工作表#编程语言时间热sheet.append(['Programing','Date','data_per'])url='https://www.tiobe.com/tiobe-index/'rep=requests.get(url,headers=headers).text#正则匹配提取数据data=re.findall('{name:(.*?),data:(.*?)}',rep)programming=[eval(k[0])forkindata]#programminglanguagedates=[i[1]foriindata]#regular表达式处理提取所需数据forxinrange(len(dates)):name=programing[x]datas=re.findall(r'\[Date.UTC(.*?)\]',dates[x],re.DOTALL)formindatas:date1=re.findall(r'\d+',m)#定时提取数date2='-'.join(date1[:3])#拼接得到时间data_per='.'.join(date1[-2:])#获取热力数据表.append([name,date2,data_per])logging.info([name,date2,data_per])wb.save('language_data.xlsx')最终运行效果如下:可以看到成功提取出想要的数据并保存到Excel中,在jupyternotebook环境查看数据:2.数据可视化本节使用pyecharts绘制时间轮播图数据可视化,展示2009-2019年Top10编程语言当前平均热度变化#-*-coding:UTF-8-*-"""@File:carouselchart.py@Author:叶庭云@CSDN:https://yetingyun.blog.csdn.net/"""importpandasapdimportxlrdimportpyecharts.optionsasoptsfrompyecharts.chartsimportTimeline,barfrompyecharts.globalsimportCurrentConfigCurrentConfig.ONLINE_HOST='D:/python/pyecharts-assets-master/assets/'#提取编程语言名称name=list(pd.read_excel('language_data.xlsx')['Programing'].drop_duplicates())data=xlrd.open_workbook('language_data.xlsx')table=data.sheets()[0]dic1={k:[]forkinname}#每种编程语言对应一年中不同时间的流行程度foriinrange(1,table.nrows):x=table.row_values(i)dic1[x[0]].append((x[1],x[2]))#对应编程语言的顺序和编程语言的流行度每年不同时间data_per={k:[[]forxinrange(10)]forkinrange(2001,2021)}print(data_per)count=0fork,vindic1.items():forjinv:#v(time,heat)将热数据添加到每年对应的列表中data_per[int(j[0][:4])][count].append(eval(j[1]))#一年中不同时间每种编程语言的流行度对应count+=1#print(data_per)data_per1={k:[]forkinlist(data_per.keys())}fork,vinlist(data_per.items()):forxinv:iflen(x)==0:#今年没有这个语言的流行度数据data_per1[k].append(0)else:avg=sum(x)/len(x)data_per1[k].append(avg)#今年的平均热度#获取TOBIE当前排名前20的编程语言从2001年到年平均热度print(data_per1)defget_year_overlap_chart(year)->Bar:sum_info=[(m,n)form,ninzip(name,data_per1[year])]#编程语言按年平均热度排序sum_info.sort(key=lambdaz:z[1],reverse=True)name_=[m[0]forminsum_info]datas=[m[1]forminsum_info]#每列的颜色列表colors=['#00BFFF','#0000CD','#000000','#008000','#FF1493','#FFD700','#FF4500','#00FA9A','#191970','#9932CC']x=[]foriinrange(10):x.append(opts.BarItem(name=name_[i],value=datas[i],itemstyle_opts=opts.ItemStyleOpts(color=colors[i])#设置每一列的颜色))#绘制柱状图bar=Bar()bar.add_xaxis(name_)bar.add_yaxis(series_name='heat',yaxis_data=x,is_selected=True,label_opts=opts.LabelOpts(is_show=False))bar.set_global_opts(title_opts=opts.TitleOpts(title="2009-2019编程语言流行度"),tooltip_opts=opts.TooltipOpts(is_show=True,trigger="axis",axis_pointer_type="shadow"),xaxis_opts=opts.AxisOpts(name='编程语言'),yaxis_opts=opts.AxisOpts(name='hot度'),)returnbar#生成时间线图timeline=Timeline(init_opts=opts.InitOpts(width="1200px",height="600px"))foryinrange(2009,2020):timeline.add(get_year_overlap_chart(y),time_point=str(y))timeline.add_schema(is_auto_play=True,play_interval=1000)timeline.render("language_2009_2019.html")运行效果如下,可见虽然Python越来越流行,Java依旧是热榜No.1的编程语言!(这里是PHP程序员拍桌子)3.补充本节说明在渲染pyecharts渲染的图形时,网页有时无法加载js文件的问题。根据网站资源参考:pyecharts使用的所有静态资源文件都存放在pyecharts-assets项目中,默认挂载在https://assets.pyecharts.org/assets/,因为默认优先从远程引用资源sources,有时会导致加载js文件失败,图表显示不出来。解决方法:下载需要的js文件到本地,修改资源引用地址,Github地址:https://github.com/pyecharts/pyecharts-assets看网站介绍,pyecharts提供了更改全局HOST的快捷方式。frompyecharts.globalsimportCurrentConfigCurrentConfig.ONLINE_HOST='D:/python/pyecharts-assets-master/assets/'#本地保存js资源的路径