全球空气质量图(爬取数据环节改进)

在前文 爬虫+matplotlib绘制全球空气质量图 中,爬虫的URL为:

r=requests.get('https://api.waqi.info/mapq/bounds/?bounds=-90,-180,90,180&inc=placeholders&k=2Y2EvHR9IHVwfHQ0OSBRWXmpjeEc9LRUaFVYdZQ==&=1543897186854')

存在两个问题:

1、bounds上下限不正确导致爬取区间不完整。

2、爬取区间的大小不同存在导致分辨率不同。

本文解决如下(代码改进感谢 Aaron Guan)——》


1、问题一:

经分析,bounds表示的为经纬度区间,经度(-90 ~ 90)、纬度(-180 ~ 180)。且URL格式为:

https://api.waqi.info/mapq/bounds/?bounds=(纬度下限),(经度下限),(纬度上限),(经度上限)…………

故可将URL写作:

https://api.waqi.info/mapq/bounds/?bounds=-90,-180,90,180&inc=placeholders&k=2Y2EvHR9IHVwfHQ0OSBRWXmpjeEc9LRUaFVYdZQ==&=1543897186854

2、问题二

将经纬度区间进行分块,添加代码如下:

lat_lower = np.arange(-90, 90, 30)
lat_upper = lat_lower + 30
long_lower = np.arange(-180, 180, 30)
long_upper = long_lower + 30

可将完整区间拆分成6×12=72块,然后生成URL,代码如下:

# base query
query_base = "https://api.waqi.info/mapq/bounds/?bounds="
# list of our queries
queries = []
# create queries
for i in range(6):  # loop over lat
    for j in range(12):  # loop over long
        bounds = "%d,%d,%d,%d" % (lat_lower[i], long_lower[j],
                                  lat_upper[i], long_upper[j])
        query = query_base + bounds
        queries.append(query)

生成72个URL,逐一进行爬取:

# create a list to contain all data
all_data = []
# run queries
for query in queries:
    data = requests.get(query)
    data_json = data.json()
    # add results to our list
    all_data.extend(data_json)
# check length
print("Obtained %d records" % len(all_data))

打印结果为:

Obtained 3351 records

至此,数据已全部保存于 all_data 中。


总结:

本文对文章 爬虫+matplotlib绘制全球空气质量图 中爬取数据环节作了如下工作:

1、纠正了URL中bounds的上下限(lat:-90 ~ 90,lon:-180 ~ 180)。

2、考虑分辨率问题,实现了将经纬度分块进行爬取。

你可能感兴趣的:(全球空气质量图(爬取数据环节改进))