2025年3月31日 星期一 乙巳(蛇)年 正月初一 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

爬取全国空气质量

时间:03-29来源:作者:点击数:30

今天天气不大好,我就是看看天气,我就发现这个网站数据不错,今天就给他全干下来!!!!!!链接:http://www.pm25.com/

我们先打开网站,查看下数据是否在相应的源码,利用network进行抓包,结果如下:
在这里插入图片描述

数据就在相应源码中,我们就将这个页面响应代码,用lxml解析,将源代码转化为etree树,分别使用xpath提取链接对每一个链接进行请求,然后再对详情页响应解析,例如:北京天气详情页http://www.pm25.com/beijing.html我们大致思路就是这样,最后把数据保存为csv文件,xpath获取数据的时候有些是空值,会报错,所以我们就全部try了,代码如下:

  • # -- coding: utf-8 --
  • # @Time : 2021/1/23 3:27
  • # @FileName: Pm2.5.py
  • # @Software: PyCharm
  • import requests
  • from lxml import etree
  • import csv
  • class Weather():
  • # 初始化
  • def __init__(self):
  • # url
  • self.url = 'http://www.pm25.com/'
  • self.headers = {
  • "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
  • "Chrome/87.0.4280.88 Safari/537.36 "
  • }
  • # 发送请求
  • def get_data(self):
  • response = requests.get(url=self.url, headers=self.headers)
  • return response
  • # 解析
  • def parse_data(self, response):
  • html = etree.HTML(response.content)
  • link_list = html.xpath('//*[@id="scrollbar1"]/div[3]/div/div[3]/div/dl/dd/a/@href')
  • for link in link_list:
  • link = 'http://www.pm25.com' + link
  • # 解析子页数据
  • self.url = link
  • response = self.get_data()
  • html = etree.HTML(response.content)
  • try:
  • city_name = html.xpath("/html/body/div[6]/div/div[1]/h2/text()")[0]
  • except:
  • pass
  • try:
  • qua = html.xpath("/html/body/div[6]/div/div[3]/div[1]/p/span[1]/text()")[0]
  • except:
  • pass
  • try:
  • aqi_num = html.xpath("/html/body/div[6]/div/div[3]/div[1]/a/text()")[0]
  • except:
  • pass
  • try:
  • pm = html.xpath("/html/body/div[6]/div/div[3]/div[2]/p[1]/span/text()")[0] + '微克/立方米'
  • except:
  • pass
  • try:
  • wea = html.xpath("/html/body/div[6]/div/div[4]/div/p/span/text()")[0]
  • temp = html.xpath("/html/body/div[6]/div/div[4]/div/p/text()")[1]
  • add_weather = wea + temp
  • except:
  • pass
  • data = "城市名称:" + city_name + ", " + "空气质量:" + qua + ", " + "AQI指数:" + aqi_num + ", " + "PM2.5浓度:" + pm + ', ' + "天气:" + add_weather
  • print(data)
  • # 这里直接单写也不返回重新定义保存函数
  • # 写入csv
  • csv_writer.writerow([city_name, qua, aqi_num, pm, add_weather])
  • # 调用
  • def run(self):
  • response = self.get_data()
  • self.parse_data(response)
  • if __name__ == '__main__':
  • # 保证只运行一次,如果不保证一次话就会
  • with open('info.csv', 'a', newline='') as f:
  • csv_writer = csv.writer(f)
  • csv_writer.writerow(["城市名称", "空气质量", 'AQI指数', "PM2.5", "天气"])
  • weather = Weather()
  • weather.run()

为了方便我就没定义保存函数,效果如下:

在这里插入图片描述

我们保存的csv文件如下:

在这里插入图片描述

有喜欢的请多多点赞!!!!!

在这里插入图片描述
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门