1.数据源:
数据来源为Pm25.in网站。
其中总共有375个城市的数据,该网站提供了空气质量监测数据(采自于国家环境保护部)。
进入其中的城市页面,可以看到每个城市中各个监测点监测到的数据,包括AQI、空气质量指数类别、首要污染物、PM2.5细颗粒物、PM10可吸入颗粒物、CO一氧化碳、NO2二氧化氮、O3臭氧1小时平均、O3臭氧8小时平均、SO2二氧化硫等10项空气质量数据,数据为每小时更新。
2.代码:
该方法只能爬取代码运行时的网站上的城市空气质量信息,而无法获得历史数据。
import requests
from lxml import etree
import pandas as pd
res = requests.get('http://www.pm25.in').text
res = etree.HTML(res)
# 获取全部城市信息
citys = res.xpath('//div[@class="all"]//a/@href')
# print(len(citys)) # 375
for city in citys:
# 构建每个城市的访问url
url = 'http://www.pm25.in' + city
# print(url)
res = requests.get(url).text
res = etree.HTML(res)
datas = res.xpath('//tbody/tr')
data_list = []
for data in datas:
list = []
# 提取监测点
list.append(data.xpath('td/text()')[0])
# 提取AQI数据
list.append(data.xpath('td/text()')[1])
# 提取空气质量指数类别数据
list.append(data.xpath('td/text()')[2])
# 提取首要污染物数据
list.append(data.xpath('td/text()')[3])
# 提取PM2.5细颗粒物数据
list.append(data.xpath('td/text()')[4])
# 提取PM10可吸入颗粒物数据
list.append(data.xpath('td/text()')[5])
# 提取CO一氧化碳数据
list.append(data.xpath('td/text()')[6])
# 提取NO2二氧化氮数据
list.append(data.xpath('td/text()')[7])
# 提取O3臭氧1小时平均数据
list.append(data.xpath('td/text()')[8])
# 提取O3臭氧8小时平均数据
list.append(data.xpath('td/text()')[9])
# 提取SO2二氧化硫数据
list.append(data.xpath('td/text()')[-1])
# 提取城市名
list.append(res.xpath('//h2/text()'))
data_list.append(list)
# 转化为dataframe对象
p_col = ['监测点','AQI','空气质量指数类别','首要污染物','PM2.5细颗粒物','PM10可吸入颗粒物','CO一氧化碳','NO2二氧化氮','O3臭氧1小时平均','O3臭氧8小时平均','SO2二氧化硫','城市名']
df = pd.DataFrame(data_list,columns=p_col)
# print(df)
df.to_csv('./环境数据.csv',mode='a',encoding='utf_8_sig',header=False)
print('爬取中...')
print('爬取完成!')