python网页爬虫+简单的数据分析 |
您所在的位置:网站首页 › python网页数据提取 › python网页爬虫+简单的数据分析 |
python网页爬虫+简单的数据分析
文章目录
python网页爬虫+简单的数据分析一、数据爬取二、数据分析
1.我们今天爬取的目标网站是:http://pm25.in/
2.需要爬取的目标数据是:该网站所有城市的空气质量数据(主要包括AQI、PM2.5/1h、PM10/1h、CO/1h、NO2/1h、O3/1h、O3/8h、SO2/1h)。
3. 我们的最终目标是:将这些数据爬取出来,并写入到.csv/.xlsx文件中,最后通过读取.csv/.xlsx文件的数据,做一下简单的数据分析。
使用的工具是Spyder(ps:个人觉得Spyder要PyCharm好使)
一、数据爬取
这里我用到的库和模块比较多,所有代码量比较少。缺少相关模块的同学自行下载应用即可,这里推荐通过镜像网址(pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests)下载,下载速度会快很多,具体使用方法请参考https://mirrors.tuna.tsinghua.edu.cn/help/pypi/ 1. 引入该项目需要用到的相关库和模块 import requests import csv from bs4 import BeautifulSoup2. 接下来写get_all_cities()函数,用来获取所有城市名称及url 其实这里应该先写主函数,不过为了演示效果就先写了get_all_cities()函数。 2.1 创建一个空列表city_list 2.2 通过requests.get(url)构造一个向服务器请求资源的Request对象,设置请求超时时间为60s。 2.3 这里我们指定Beautiful的解析器为“html.parser” 2.4 接下来就要爬取网站中所有城市名称了。以北京市为例,我们首先需要打开待爬取网站并查看网页代码,可以看到“北京”这个城市是隶属于第一个“bottom”,接下来就是将所有“bottom”下的城市全部获取,这里我们使用BeautifulSoup来获取。 2.6 我们先来看一下运行该段函数代码的结果是什么样的。 3.下面写get_city_aqi()函数,用来获取所有城市的AQI值 3.1 以北京市为例,如下图,我们需要获取的数据是AQI对应的44、PM2.5/1h对应的25、PM10/1h对应的43、CO/1h对应的0.5…; 具体代码如下: def get_city_aqi(city_pinyin): #获取城市AQI url = 'http://pm25.in/' + city_pinyin r = requests.get(url,timeout=60) soup = BeautifulSoup(r.text,'html.parser') div_list = soup.find_all('div',{'class':'span1'}) city_aqi = [] for i in range(8): div_content = div_list[i] caption = div_content.find('div',{'class','caption'}).text.strip() value = div_content.find('div',{'class','value'}).text.strip() city_aqi.append(value) return city_aqi4. 接下来写main函数,调用前面写的两个功能函数实现数据爬取与写入 这部分内容不是很多,主要设计一些文件操作,对文件操作不熟悉的需要重新学习下python文件操作的基础知识。这里在代码中添加了一些爬取的进度提示并print到窗口,使得过程更贴合实际情况。 4.1 具体实现代码如下: def main(): city_list = get_all_cites() header = ['city','AQI','PM2.5/1h','PM10/1h','CO/1h','NO2/1h','O3/1h','O3/8h','SO2/1h'] with open('china_city_aqi.csv','w',encoding='utf-8',newline='') as f: writer =csv.writer(f) writer.writerow(header) for i,city in enumerate(city_list): if (i+1)%10 == 0: print('已经处理{}条数据。(共有{}条数据)'.format(i+1,len(city_list))) city_name = city[0] city_pinyin = city[1] city_aqi = get_city_aqi(city_pinyin) row = [city_name]+city_aqi writer.writerow(row)5. 最后写两行代码防止在被其他文件导入时显示多余的程序主体部分。 if __name__ == '__main__': main()5. 最后看下运行结果。 最终爬取到的数据会写入到china_city_aqi.csv中,我们打开.csv文件看下结果是什么样的。 上面我们已经成功爬取到网站的数据了,接下来我们对.csv文件中的数据进行分析。数据分析涉及的知识点非常多,这里只对空气质量指数数据做简单的排名分析。当然,也可以根据需要对所有城市的单项数据进行分析。 1. 引入该项目需要用到的相关库和模块 import pandas as pd import matplotlib.pyplot as plt2. 解决中文不能正常显示问题 #解决中文不能正常人显示问题 plt.rcParams['font.sans-serif']=['Arial Unicode MS'] plt.rcParams['axes.unicode_minus'] = False3. 接下来写main函数 主要涉及到python的图表操作和数据预处理,具体实现代码如下: def main(): aqi_data = pd.read_csv('china_city_aqi.csv') #??csv?? print('爬取数据类别') print(aqi_data.info()) print('测试数据') print(aqi_data.head()) #????????AQI???0??? clean_aqi_data = aqi_data[aqi_data['AQI']>0] print('AQI最大值:',clean_aqi_data['AQI'].max()) print('AQI最小值:',clean_aqi_data['AQI'].min()) print('AQI平均值:',clean_aqi_data['AQI'].mean()) #?????AQI?50???? top_50_cities = clean_aqi_data.sort_values(by=['AQI']).head(50) top_50_cities.plot(kind='bar',x='city',y='AQI',title='AQI五十强',figsize=(32,18)) plt.savefig('top_50_cities_bar.png') plt.show()4. 最后写两行代码防止在被其他文件导入时显示多余的程序主体部分。 if __name__ == '__main__': main()5. 看一下运行结果 各位的鼓励就是我创作的最大动力,如果哪里写的不对的,欢迎评论区留言进行指正,如有收获请给博主一个免费的赞鼓励下呗📝 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |