You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
violin/大作业爬虫王永麟杨镇组.py

74 lines
3.0 KiB

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]
#大型国家的面积为50100万平方千米
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王永麟 杨镇
'''