|
|
|
@ -0,0 +1,73 @@
|
|
|
|
|
import requests as rq
|
|
|
|
|
import matplotlib.pyplot as plt
|
|
|
|
|
import re
|
|
|
|
|
import pandas as pd
|
|
|
|
|
#网址
|
|
|
|
|
url='https://www.ip138.com/shoudu/'
|
|
|
|
|
headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"}
|
|
|
|
|
rp = rq.get(url,headers=headers)
|
|
|
|
|
rp.encoding='utf-8' #设置编码为utf-8
|
|
|
|
|
a=rp.text #转文本用正则表达式分析
|
|
|
|
|
x=re.findall('<td>(.+?)</td>|<td class="sc">(.+?)</td>', a)
|
|
|
|
|
#分列表以制作二维数据,分别为国家、面积、英文简称、首都
|
|
|
|
|
country=[]
|
|
|
|
|
square=[]
|
|
|
|
|
english=[]
|
|
|
|
|
capital=[]
|
|
|
|
|
n=1
|
|
|
|
|
for i in x: #遍历循环将个数据分离
|
|
|
|
|
i=str(i)
|
|
|
|
|
for j in ['(',')','\'','\"','约','\\xa0',',',' ','⑦']: #将字符串中多余字符删除
|
|
|
|
|
i=i.replace(j,'')
|
|
|
|
|
if n%4==1:
|
|
|
|
|
country.append(i)
|
|
|
|
|
n+=1
|
|
|
|
|
elif n%4==2:
|
|
|
|
|
i=eval(i)
|
|
|
|
|
square.append(i)
|
|
|
|
|
n+=1
|
|
|
|
|
elif n%4==3:
|
|
|
|
|
english.append(i)
|
|
|
|
|
n+=1
|
|
|
|
|
elif n%4==0:
|
|
|
|
|
capital.append(i)
|
|
|
|
|
if i=='开罗':
|
|
|
|
|
country.append('大阿拉伯利比亚人民社会主义民众国') #此处处理一个正则表达式分析过程中的bug
|
|
|
|
|
n+=1
|
|
|
|
|
n+=1
|
|
|
|
|
#建立二维数据
|
|
|
|
|
df=pd.DataFrame(columns=['国家','面积','英文名称','首都'])
|
|
|
|
|
#将信息填入dataframe数据中
|
|
|
|
|
df.国家=country
|
|
|
|
|
df['面积']=square
|
|
|
|
|
df.英文名称=english
|
|
|
|
|
df.首都=capital
|
|
|
|
|
#将数据按照国家面积大小进行排序
|
|
|
|
|
f=df.sort_values(by=['面积'],axis=0,ascending=[False])
|
|
|
|
|
#绘制饼状图所用编号
|
|
|
|
|
bh=['巨型国家','超大型国家','大型国家','中型国家','小型国家','超小型国家','微型国家']
|
|
|
|
|
#巨型国家面积大于500万平方千米
|
|
|
|
|
jx=f[f['面积']>5000000][['国家','面积']]
|
|
|
|
|
#超大型国家的面积为100万~500万平方千米
|
|
|
|
|
cd=f[f['面积']<5000000][['国家','面积']] ; cdx=cd[cd['面积']>1000000]
|
|
|
|
|
#大型国家的面积为50~100万平方千米
|
|
|
|
|
d=f[f['面积']<1000000][['国家','面积']] ; dx=d[d['面积']>500000]
|
|
|
|
|
#中型国家的面积为10万~50万平方千米
|
|
|
|
|
z=f[f['面积']<500000][['国家','面积']] ; zx=z[z['面积']>100000]
|
|
|
|
|
#小型国家的面积为5万~10万平方千米
|
|
|
|
|
x=f[f['面积']<100000][['国家','面积']] ; xx=x[x['面积']>50000]
|
|
|
|
|
#超小型国家的面积为1万~5万平方千米
|
|
|
|
|
cx=f[f['面积']<50000][['国家','面积']] ; cxx=cx[cx['面积']>10000]
|
|
|
|
|
#微型国家的面积是1万平方千米以下
|
|
|
|
|
wx=f[f['面积']<10000][['国家','面积']]
|
|
|
|
|
#统计各个国家分类中国家数量
|
|
|
|
|
m=[len(jx),len(cdx),len(dx),len(zx),len(xx),len(cxx),len(wx)]
|
|
|
|
|
plt.pie(m, labels=bh,autopct='%.1f%%',explode=[0.4,0,0,0,0.3,0,0],shadow=True,colors=('r','g','b','c','m','y','w'))
|
|
|
|
|
#将饼状图和原表格存储
|
|
|
|
|
plt.savefig('国家比例.png')
|
|
|
|
|
df.to_excel('世界各国.xls')
|
|
|
|
|
'''
|
|
|
|
|
start2021/12/14
|
|
|
|
|
end2021/12/15
|
|
|
|
|
auther王永麟 杨镇
|
|
|
|
|
'''
|