本文最后更新于831 天前,其中的信息可能已经过时,如有错误请评论留言
先看最终效果

爬取数据并存入CSV
不同功能分成两个文件看的清楚点,调试也方便,代码如下:
// Tiobe.py
import csv
import re
import requests
url = 'https://www.tiobe.com/tiobe-index/'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'
}
# 创建本地文件
f = open('Tiobe.csv', 'w', newline='')
# 分类
writer = csv.DictWriter(f, ['Programming', 'DataPer', 'Data'])
writer.writeheader()
response = requests.get(url, headers=headers)
html = response.text
# 正则清洗数据
result = ''.join(re.findall(r'series: (.*?)}\);', html, re.DOTALL))
result = re.findall(r'({.*?})', result, re.DOTALL)
for item in result:
name = ''.join(re.findall(r"{name : '(.*?)'", item, re.DOTALL))
data = re.findall(r"\[Date.UTC(.*?)]", item, re.DOTALL)
for i in data:
i = i.replace(' ', '')
i = re.sub(r'[()]', '', i)
value = i.split(',')[-1]
time_list = i.split(',')[:3]
time = ""
for index, j in enumerate(time_list):
if index != 0:
if len(j) == 1:
j = '0' + j
if index == 0:
time += j
else:
time += '-' + j
temp = {
'Programming': name,
'DataPer': value,
'Data': time
}
writer.writerow(temp)
# 写入本地文件
f.close()
读取CSV文件并生成动态图
// showTiobe.py
import plotly.express as px
import pandas as pd
df = pd.read_csv('Tiobe.csv')
fig = px.bar(df,
y="Programming",
x="DataPer",
animation_frame="Data",
range_x=[0, df.DataPer.max()],
orientation='h',
text='DataPer',
color="Programming")
# 设置动画排序规则为 DataPer 升序
fig.update_layout(barmode='stack', yaxis={'categoryorder': 'total ascending'})
# 绘制
fig.update_layout(width=700, height=700,
xaxis_showgrid=False,
yaxis_showgrid=False, # x y 向线
showlegend=True) # 图例
fig.update_xaxes(title_text="TIOBE趋势图")
fig.show()
这样就完成了,运行后会自动在浏览器打开生成好的动态图
每次都直接给完整代码方便你们CV,上哪找我这么好的人 q(≧▽≦q)