我自己需要天气数据会直接使用高德、百度开放平台的API获取,比较方便。但之前因为同学研究需求,他觉得墨迹天气的天气数据相对比较准确一点,所以帮他爬取了墨迹天气的天气数据。
文末有完整代码

1. 准备环境

当时墨迹天气自身提供的API是收费的,现在不知如何,requests的动态爬取针对墨迹天气的页面无法实现,因此选用selenium模仿浏览器进行爬取。
准备:
① python3+selenium库
② 我们需要安装浏览器的支持,如果电脑上已安装有Chrome浏览器,则还需下载chromedirver,注意需要安装与浏览器对应的版本,下载完成后,需要将其添加至系统的Path中。

2. 所需爬取内容

爬取页面的链接为:https://tianqi.moji.com/aqi/china/shaanxi/xian

所需爬取的内容为下方图片中红框内的内容

3. 详细爬取过程

3.1 分析待爬取页面

打开墨迹天气的实时天气状况,https://tianqi.moji.com/aqi/china/shaanxi/xian
如下图所示,图中红框内的数据是动态地在更新。

3.2 利用Selenium提取数据

(1)打开网页

from selenium import webdriver
import time
import csvbrowser = webdriver.Chrome()
browser.get('https://tianqi.moji.com/aqi/china/shaanxi/xian')

(2)定位数据

F12进入开发者页面→Elements→选择器定位数据位置

例如aqi数据,即图中的63,对应在选择器中的位置为id名为api_value的位置。根据位置,提取出aqi数据:

aqi_value = browser.find_element_by_id('aqi_value').text

其它的同理

(3)存储数据

提取的天气数据存储到csv文件中

with open('爬取空气质量.csv','a',newline='') as csvfile:fieldnames = ['local_time','aqi_value','aqi_desc','pm10','pm2.5','NO2','SO2','O3','CO','temperature','temperature_des','humidity','wind']writer = csv.DictWriter(csvfile,fieldnames = fieldnames)writer.writerow(content)

4.完整代码

from selenium import webdriver
import time
import csvdef findSubStr(substr, str, i):count = 0while i > 0:index = str.find(substr)if index == -1:return -1else:str = str[index+1:]i -= 1count = count + index + 1return count - 1
def get_one_page():browser = webdriver.Chrome()browser.get('https://tianqi.moji.com/aqi/china/shaanxi/xian')browser.implicitly_wait(10)weather = {}weather['local_time'] = time.strftime('%Y-%m-%d,%H:%M:%S',time.localtime(time.time()))weather['aqi_value'] = browser.find_element_by_id('aqi_value').text  #aqiweather['aqi_desc'] = browser.find_element_by_id('aqi_desc').textpm = browser.find_elements_by_css_selector('.aqi_info_item li')weather['pm10'] = pm[0].text.split()[1]weather['pm2.5'] = pm[1].text.split()[1]weather['NO2'] = pm[2].text.split()[1]weather['SO2'] = pm[3].text.split()[1]weather['O3'] = pm[4].text.split()[1]weather['CO'] = pm[5].text.split()[1]browser.close()return weather
#a = browser.find_element_by_class_name('aqi_info_item')
def get_second_page():browser = webdriver.Chrome()browser.get('https://tianqi.moji.com/weather/china/shaanxi/xian')browser.implicitly_wait(10)wendu = browser.find_element_by_class_name('left').textweather = {}weather['temperature'] = wendu[findSubStr('\n', wendu, 2) + 1:findSubStr('\n', wendu, 3)]weather['temperature_des'] = wendu[findSubStr('\n', wendu, 3) + 1:findSubStr('\n', wendu, 4)]weather['humidity'] = wendu[findSubStr('\n', wendu, 5) + 1:findSubStr('\n', wendu, 6)]weather['wind'] = wendu[findSubStr('\n', wendu, 6) + 1:findSubStr('\n', wendu, 7)]browser.close()return weatherdef write_to_file(content):with open('爬取空气质量.csv','a',newline='') as csvfile:fieldnames = ['local_time','aqi_value','aqi_desc','pm10','pm2.5','NO2','SO2','O3','CO','temperature','temperature_des','humidity','wind']writer = csv.DictWriter(csvfile,fieldnames = fieldnames)writer.writerow(content)
while True:weather_1 = get_one_page()weather_2 = get_second_page()weather = dict(weather_1,**weather_2)print(weather)write_to_file(weather)time.sleep(3600)

爬取的数据如图:

selenium爬取墨迹天气相关推荐

  1. node爬取墨迹天气数据发送定时邮件

      使用vscode通过node.js爬取墨迹天气网站的数据,然后通过邮件每天定时给特定的一个或者多个邮箱发送具有特定html样式的163邮件. 实现爬取功能准备工作: 官网下载node.js 打开v ...

  2. python3爬取墨迹天气并发送给微信好友,附源码

    需求: 1. 爬取墨迹天气的信息,包括温湿度.风速.紫外线.限号情况,生活tips等信息 2. 输入需要查询的城市,自动爬取相应信息 3. 链接微信,发送给指定好友 思路比较清晰,主要分两块,一是爬虫 ...

  3. Python 爬虫篇-利用BeautifulSoup库爬取墨迹天气网的天气信息实例演示,调用墨迹天气api接口获取空气质量

    安装方法: pip install BeautifulSoup4 BeautifulSoup 详细使用文档 墨迹天气抓取演示 墨迹天气没有提供专门的天气接口 api,但我们可以用 BeautifulS ...

  4. python爬取墨迹天气的8月份的温度情况并发送到邮箱

    目标:获取墨迹天气的整个8月份的温度情况,并以txt格式的文件发送到邮箱 环境:pyhton3.6   pycharm软件   163邮箱(163邮箱要打开授权码,才能发送成功) 思路:1.获取墨迹天 ...

  5. python爬取墨迹天气

    from urllib.request import urlopen from bs4 import BeautifulSoup from xpinyin import Pinyin prov = i ...

  6. 爬虫攻守道 - 2023最新 - Python Selenium 实现 - 数据去伪存真,正则表达式谁与争锋 - 爬取某天气网站历史数据

    前言 前面写过3篇文章,分别介绍了反爬措施,JS逆向+ajax获取数据,以及正则表达式匹配开头.结尾.中间的用法.第3篇算是本文 Python Selenium 爬虫实现方案的子集,大家可以参照阅读. ...

  7. python 爬取墨迹天气预报(超简单!该代码用于实际生产)

    爬取墨迹天气信息用于实际生产(为了展示稍有修改) # -*- coding: UTF-8 -*- # @Time :2021/2/8 9:41 # @Author :Liuzheng # @Email ...

  8. 爬虫笔记1--爬取墨迹天气

    爬虫笔记1--爬取墨迹天气 最近由于需要写了一个简单的墨迹天气爬取脚本,主要功能为爬取墨迹天气,然后将其存到MySQL数据库中. 1.功能 本代码主要功能为:爬取墨迹天气数据,将数据保存到MySQL数 ...

  9. python爬取本地天气信息_用Python写一个爬取中国天气网的终端版天气预报爬虫

    导语 前几篇文章介绍了爬取静态网站的主要方法.今天写一个小项目实践一下.本项目可以在终端窗口查询全国3400多个区县的当日天气信息和近七天天气信息. 实现效果 [Python爬虫]写一个爬取中国天气网 ...

最新文章

  1. 声明与函数、函数指针
  2. 深入理解abstract class和interface
  3. 配置phpmyadmin的认证方式 wamp下的phpmyadmin密码修改
  4. .NET Core 容器化调查
  5. SQLserver C#将图片以二进制方式存储到数据库,再从数据库读出图片
  6. 正则表达式非捕获分组?:
  7. 常见排序算法之快速排序
  8. OpenCV46:立体图像的深度图|Depth Map
  9. 2021全网最全Activiti7教程01(Activiti7详细介绍-欢迎收藏)
  10. Think:研究生期间的迷茫、困惑——放平心态,奋力拼搏
  11. 呸!都TM开始打广告了,垃圾!
  12. Vue实现图片预览(放大缩小拖拽)纯手写
  13. 数学/线性代数 {子式,余子式,代数余子式,拉普拉斯展开}
  14. 安卓android_rom定制,移植,安卓Android_ROM定制、移植:第一~~八篇(全)
  15. VUE整合信通身份证阅读器返回读取到的数据或将身份证图片返回
  16. mybatis plus 条件构造器queryWrapper学习
  17. 面向前端与未来标准的Node.js Web 框架再进化
  18. office 2013下载及安装方案
  19. Remotely Controlling(远程控制) an Octeon through PCI, PCIe, or EJTAG
  20. 玩转服务器-博客两件套之绝佳的Markdown写作平台CodiMD

热门文章

  1. 思科防火墙ASA配置案例
  2. cpu、虚拟机、网络设备省电方法
  3. EM算法的原理推导及解释
  4. android MVC,MVP架构
  5. 百度图像识别 API
  6. HTML5第三弹:亦酷亦萌的网络拓扑图
  7. 详解软件无线电(SDR)架构
  8. cJSON库用法详解
  9. 鸿蒙 ros,ROS多线路负载均衡
  10. 浏览器插件有什么作用,怎么安装浏览器扩展插件