爬取全国空气质量数据
生活随笔
收集整理的這篇文章主要介紹了
爬取全国空气质量数据
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
思路:
1、空氣質量在線監測平臺 https://www.aqistudy.cn/;
2、分析網站,找到歷史數據查詢入口:https://www.aqistudy.cn/historydata/,首頁為各城市入口,二層統計各月份數據,三層為每日數據;
3、使用crawspider獲取每月url;
4、xpath解析數據,保存至csv和redis數據庫中。
出現的問題:
除首頁外,網頁使用了動態JS,無法直接解析獲取需要的數據。
解決:
改寫下載中間件,使用webdrive發送get請求,獲取數據。
一、準備工作
創建一個scrapy project:
scrapy startproject AQI創建spider file
scrapy genspider -t crawl aqi aqistudy.cn二、構建框架
(1)items.py / 定義item
(2) spider.py
from scrapy.linkextractors import LinkExtractor from scrapy.spiders import CrawlSpider, Rule from AIR.items import AirItemclass AirSpider(CrawlSpider):name = 'aqi'allowed_domains = ['aqistudy.cn']start_urls = ['https://www.aqistudy.cn/historydata/']#以獲取武漢2019年數據舉例,rule-1獲取武漢url,rule-2獲取2019年urlrules = (Rule(LinkExtractor(allow=r'city=武漢$')),#無callback默認follow為TrueRule(LinkExtractor(allow=r'month=2019'), callback='parse_item', follow=False),)def parse_item(self, response):item = AirItem()item['Title'] = response.xpath('//*[@id="title"]/text()').extract_first()[8:-11]air_list = response.xpath('//tbody/tr')for air in air_list[1:]:item['Day'] = air.xpath('./td[1]/text()').extract_first()item['AQI'] = air.xpath('./td[2]/text()').extract_first()item['Quality_level'] = air.xpath('./td[3]/span/text()').extract_first()item['PM_2_5'] = air.xpath('./td[4]/text()').extract_first()item['PM_10'] = air.xpath('./td[5]/text()').extract_first()item['SO2'] = air.xpath('./td[6]/text()').extract_first()item['CO'] = air.xpath('./td[7]/text()').extract_first()item['NO2'] = air.xpath('./td[8]/text()').extract_first()item['O3_8H'] = air.xpath('./td[9]/text()').extract_first()print(item['Day'])yield item(3) middlewares.py
改寫下載中間件,使用webdriver發送請求
(4)pipelines.py
from scrapy.exporters import CsvItemExporter import redis import json #管道一:存儲到CSV格式 class AirPipeline(object):def open_spider(self,spider):self.file = open('airdata.csv','wb')self.exporter = CsvItemExporter(self.file)self.exporter.start_exporting()def process_item(self, item, spider):self.exporter.export_item(item)return itemdef close_spider(self,spider):self.exporter.finish_exporting()self.file.close()#管道二:存儲redis數據庫 class RedisPipeline(object):def open_spider(self,spider):self.redis = redis.StrictRedis(host='127.0.0.1',port=6379)self.redis_key = 'spider_air'def process_item(self,item,spider):#將獲取到的數據轉為json字符串格式self.redis.lpush(self.redis_key,json.dumps.(dict(item)))return item5)設置setting
一般寫好一部分代碼就開啟相應的設置,以防忘記
三、運行spider
(1)打開Redis服務器,啟動客戶端
(2)運行spider
scrapy crawl aqi四、完成以上幾步即可等待查看數據啦
總結
以上是生活随笔為你收集整理的爬取全国空气质量数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机硬件的选购与组装实验报告,计算机硬
- 下一篇: 计算机硬件组装和装机的实训总结,计算机硬