楼主: 江河1703
1652 0

爬虫大法:日度空气质量数据的爬取 [推广有奖]

  • 0关注
  • 32粉丝

博士生

32%

还不是VIP/贵宾

-

威望
0
论坛币
11134 个
通用积分
74.1723
学术水平
36 点
热心指数
38 点
信用等级
36 点
经验
7596 点
帖子
81
精华
0
在线时间
365 小时
注册时间
2019-1-12
最后登录
2024-2-8

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

之前给大家分享了月度空气质量数据的爬虫程序,详见“爬虫大法:空气质量数据的爬取”一文。事实上,中国空气质量在线监测分析平台(https://www.aqistudy.cn/historydata/)也提供了全国384个城市和地区的日度空气质量数据,只是爬取下来程序更为复杂,耗费时间也会更长。

这个爬虫程序的思路还是先爬取城市名,构造网址,然后再通过网址爬取各个城市的日度空气质量数据。这个网站日度数据网址命名规则是这样的:

https://www.aqistudy.cn/historydata/daydata.php?city=北京&month=2015-01

https://www.aqistudy.cn/historydata/daydata.php?city=北京&month=2015-02

……

https://www.aqistudy.cn/historydata/daydata.php?city=上海&month=2015-01

https://www.aqistudy.cn/historydata/daydata.php?city=上海&month=2015-02

其实,很容易分解,就是初始网址+城市名+月份。有了思路之后,代码都是浮云了!飘了飘了!

  1. import requests
  2. from lxml import etree
  3. headers = {
  4.     'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.204 Safari/537.36'
  5. }
  6. url = "https://www.aqistudy.cn/historydata/"
  7. response = requests.get(url, headers=headers)
  8. text = response.content.decode('utf-8')
  9. html = etree.HTML(text)
  10. city_set = list()
  11. citys = html.xpath("//div[@class='all']/div/ul")
  12. for city in citys:
  13.     messages = city.xpath(".//li")
  14.     for message in messages:
  15.         city_name = message.xpath(".//a/text()")
  16.         city_name = "".join(city_name)
  17.         # print(city_name)
  18.         city_set.append(city_name)
  19. print(city_set)

  20. import time
  21. from urllib import parse
  22. import pandas as pd
  23. from selenium import webdriver
  24. driver = webdriver.PhantomJS(r'D:/爬虫下载/phantomjs-2.1.1-windows\bin\phantomjs.exe')
  25. base_url = 'https://www.aqistudy.cn/historydata/daydata.php?city='
  26. def get_month_set():
  27.     month_set = list()
  28.     # for i in range(1, 10):
  29.     #     month_set.append(('2014-0%s' % i))
  30.     # for i in range(10, 13):
  31.     #     month_set.append(('2014-%s' % i))
  32.     for i in range(1, 10):
  33.         month_set.append(('2015-0%s' % i))
  34.     for i in range(10, 13):
  35.         month_set.append(('2015-%s' % i))
  36.     for i in range(1, 10):
  37.         month_set.append(('2016-0%s' % i))
  38.     for i in range(10, 13):
  39.         month_set.append(('2016-%s' % i))
  40.     for i in range(1, 10):
  41.         month_set.append(('2017-0%s' % i))
  42.     for i in range(10, 13):
  43.         month_set.append(('2017-%s' % i))
  44.     for i in range(1, 10):
  45.         month_set.append(('2018-0%s' % i))
  46.     for i in range(10, 13):
  47.         month_set.append(('2018-%s' % i))
  48.     for i in range(1, 10):
  49.         month_set.append(('2019-0%s' % i))
  50.     for i in range(10, 13):
  51.         month_set.append(('2019-%s' % i))
  52.     for i in range(1, 5):
  53.         month_set.append(('2020-0%s' % i))
  54.     return month_set
  55. month_set = get_month_set()
  56. # print(month_set)

  57. for k in range(0,len(city_set)):
  58.     city = city_set[k]
  59.     # fp = open(r'D:\爬虫下载\日空气质量\%s.csv'% (str(city)), 'a')
  60.     # fp.write('%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n'%('序号','日期','AQI','grade','PM2.5','PM10','SO2','CO','NO2','O3'))#表头
  61.     # fp.close()
  62.     for i in range(len(month_set)):
  63.         str_month = month_set[i]
  64.         weburl = ('%s%s&month=%s' % (base_url, parse.quote(city), str_month))
  65.         print(city,str_month)
  66.         driver.get(weburl)
  67.         time.sleep(3)
  68.         dfs = pd.read_html(driver.page_source,header=0)[0]
  69.         # time.sleep(0.5)#防止页面一带而过,爬不到内容
  70.         dfs.to_csv(r'D:\爬虫下载\日空气质量\%s.csv' % (str(city)), mode='a+', encoding='utf_8_sig')
  71. driver.quit()
  72. print ('爬虫已经爬完!请检测!')
复制代码

有需要本期爬虫代码和爬取下来的日度空气质量数据的朋友,可以在公众号【功夫计量经济学】后台回复“AQI”,即可看到获取方式。为了感谢各位朋友的支持,月度空气质量数据的下载已经放开,不再需要转发,后台回复”PM2.5”即可看到下载链接。


数据说明:

(1)这次爬取的是384个城市和地区2015年1月1日到2020年4月30日的日度空气质量数据。但是,像有些地区比如西藏林芝、日喀则是2017年1月1日之后才有数据的。

(2)因为网站上实际上没有保亭、白沙、昌江、澄迈、儋州、定安、东方、乐东、临高、陵水、琼海、琼中、屯昌、万宁、文昌和五指山这16个城市和地区的空气质量数据,所以这些城市和地区爬取下来的会是空白,最终一共只有368个城市和地区的数据。

(3)这个网站事实上也存在数据缺失的问题,有些城市有些月份、有些日期是没有数据的。当然,缺失的相当少。


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


已有 2 人评分经验 论坛币 收起 理由
nuomin + 100 + 100 精彩帖子
statax + 20 + 5 精彩帖子

总评分: 经验 + 120  论坛币 + 105   查看全部评分

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-30 16:31