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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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王永麟 杨镇
'''