在前文 爬虫+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、考虑分辨率问题,实现了将经纬度分块进行爬取。
网友评论