抓包

从Windows10 1804开始,天气数据不是在启动天气app时才请求的,而是定时请求+后台存储。api的地址也换了,原tile-service失效(也是为什么博客更新的原因)
博主某天在抓其他东西时抓到了这个请求:http://api.msn.com/weather/LiveTile/front?locale=zh-CN&lat=31.2559617&lon=121.2989499&apiKey=OkWqHMuutahBXs3dBoygqCjgXRt6CV4i5V7SRQURrT
(注:为保护博主个人地址隐私,坐标已经过微量偏移处理。)

分析

URL:http://api.msn.com/weather/LiveTile/front
请求方法: GET
返回格式: XML
反扒:


参数 意思
locale zh-CN(不变) 语言,会IP效验
lat 31.2559617(变) 坐标纬度
lon 121.2989499(变) 坐标经度
apikey OkWqHMuutahBXs3dBoygqCjgXRt6CV4i5V7SRQURrT 未知(疑似加密后的系统标识码)

返回数据

<tile>
<visual version="2" Branding="name">
<binding template="TileSmall" hint-textStacking="center" hint-overlay="30" branding="none">
<image placement="background" src="http://img-s-msn-com.akamaized.net/tenant/amp/entityid/AA2FDUe.img"/>
<group>
<subgroup hint-weight="50">
<image hint-removeMargin="true" src="https://assets.msn.com/weathermapdata/1/static/icons/106/AAehR3S.png"/>
</subgroup>
<subgroup hint-weight="70" hint-textStacking="bottom">
<text>30°</text>
</subgroup>
</group>
</binding>
<binding template="TileMedium" DisplayName="上海市嘉定区" hint-overlay="30">
<image placement="background" src="http://img-s-msn-com.akamaized.net/tenant/amp/entityid/AA2FDUe.img"/>
<group>
<subgroup hint-weight="80"/>
<subgroup hint-weight="20">
<image hint-removeMargin="true" src="https://assets.msn.com/weathermapdata/1/static/weatherapp/Spacer/10px.png"/>
</subgroup>
</group>
<group>
<subgroup hint-weight="60" hint-textStacking="bottom">
<image hint-removeMargin="true" src="https://assets.msn.com/weathermapdata/1/static/icons/106/AAehR3S.png"/>
</subgroup>
<subgroup hint-weight="50" hint-textStacking="center">
<text hint-align="right" hint-style="title">30</text>
</subgroup>
<subgroup hint-weight="20">
<text>°C</text>
<text/>
</subgroup>
</group>
</binding>
<binding template="TileWide" DisplayName="上海市嘉定区" hint-overlay="30">
<image placement="background" src="http://img-s-msn-com.akamaized.net/tenant/amp/entityid/AA2FDUe.img"/>
<text hint-style="body"/>
<group>
<subgroup hint-weight="20" hint-textStacking="center">
<image hint-removeMargin="true" src="https://assets.msn.com/weathermapdata/1/static/icons/106/AAehR3S.png"/>
</subgroup>
<subgroup hint-weight="23" hint-textStacking="center">
<text hint-align="right" hint-style="subtitle">30</text>
</subgroup>
<subgroup hint-weight="10" hint-textStacking="center">
<text>°C</text>
<text/>
</subgroup>
<subgroup hint-weight="60" hint-textStacking="center">
<text hint-wrap="true" hint-style="body">晴</text>
</subgroup>
</group>
</binding>
<binding template="TileLarge" DisplayName="上海市嘉定区" hint-overlay="30">
<image placement="background" src="http://img-s-msn-com.akamaized.net/tenant/amp/entityid/AA2FDUe.img"/>
<text/>
<group>
<subgroup hint-weight="20" hint-textStacking="center">
<image hint-removeMargin="true" src="https://assets.msn.com/weathermapdata/1/static/icons/106/AAehR3S.png"/>
</subgroup>
<subgroup hint-weight="23" hint-textStacking="center">
<text hint-align="right" hint-style="subtitle">30</text>
</subgroup>
<subgroup hint-weight="10" hint-textStacking="center">
<text>°C</text>
<text/>
</subgroup>
<subgroup hint-weight="60" hint-textStacking="center">
<text hint-wrap="true" hint-style="body">晴</text>
</subgroup>
</group>
<text/>
<group>
<subgroup hint-weight="1">
# 未来天气日报,略
</subgroup>
</group>
<group>
<subgroup hint-weight="1">
<text hint-align="center">29°</text>
<text hint-align="center" hint-style="captionSubtle">16°</text>
</subgroup>
<subgroup hint-weight="1">
<text hint-align="center">24°</text>
<text hint-align="center" hint-style="captionSubtle">14°</text>
</subgroup>
<subgroup hint-weight="1">
<text hint-align="center">22°</text>
<text hint-align="center" hint-style="captionSubtle">12°</text>
</subgroup>
<subgroup hint-weight="1">
<text hint-align="center">23°</text>
<text hint-align="center" hint-style="captionSubtle">16°</text>
</subgroup>
<subgroup hint-weight="1">
<text hint-align="center">22°</text>
<text hint-align="center" hint-style="captionSubtle">16°</text>
</subgroup>
</group>
</binding>
</visual>
</tile>

根据分析,提取如下表达式:
大致区域://tile/visual/binding[3]的DisplayName属性
当前温度://tile/visual/binding[3]/group/subgroup[2]/text的内容
天气状况://tile/visual/binding[3]/group/subgroup[3]/text的内容

代码

格式化返回:

from urllib.request import urlopen
import xmltodictdef getWeather(lat, lon):r = urlopen("http://api.msn.com/weather/LiveTile/front?locale=zh-CN&lat=%f&lon=%f&apiKey=OkWqHMuutahBXs3dBoygqCjgXRt6CV4i5V7SRQURrT" % (lat, lon))j = xmltodict.parse(r.read().decode())i = j["tile"]["visual"]["binding"][2]n = i["@DisplayName"]g = i["group"]["subgroup"]t = g[1]["text"]["#text"]+"℃l = g[3]["text"]["#text"]c = g[0]["image"]["@src"]return {"Location":n,"Weather":l,"Temperature":t,"ImageURL":"c"}

Windows10(MSN)天气数据爬取相关推荐

  1. Scrapy全国历史天气数据爬取

    Scrapy全国历史天气数据爬取 历史天气网站http://www.tianqihoubao.com/lishi/ 1.解析网页 我们要爬取每个城市,近10年的历史天气数据,我们需要进到每个城市历史数 ...

  2. Python爬虫 —— 以北京天气数据爬取为例

    本文以北京天气为例讲解数据爬取的整个流程,不涉及网络爬虫的原理,直接讲爬取代码怎么写! 1.首先找到你要爬取的网站url:'http://www.tianqihoubao.com/lishi/beij ...

  3. power BI 天气数据爬取

    简介 本篇案例主要介绍如何通过power BI 构建爬虫抓取历史天气数据 数据爬取 如何从power bi 获取网页的数据 首先,打开需要爬起天气数据的网站,点击历史天气,之后可以看到全国各个省份和城 ...

  4. R语言某一年各省各月份天气数据爬取

    因为项目需要,在此,本人用R语言对某一年各省的省会各月份天气数据进行爬取.想爬取其他城市的数据也是大同小异. 本次爬取的天气数据包括"日期","天气状况",&q ...

  5. python实现天气数据爬取实现数据可视化和天气查询gui界面设计

    在学校大一实训中,我的实训项目就是使用python爬取天气数据并且实现gui图形界面的设计. 实训结束了,希望自己的代码可以帮助大家的学习.(代码是大一时候写的,比较青涩,大家多包涵) 第一个部分是g ...

  6. 全国历史天气查询/历史天气预报查询——全国各月份数据爬取

    全国历史天气查询/历史天气预报查询--全国各月份数据爬取 效果 图1 目标爬取数据 图2 最终实验效果 实验效果:最终可将官网已有的数据进行爬取整理,共363个城市,从2011年1月--至今 数据已上 ...

  7. python爬取历史天气_Python 爬取历史天气数据

    Python 爬取历史天气数据 作者:梅昊铭 1. 导读 之前Mo给大家分享过杭州历年天气情况的数据集,相信有不少小伙伴好奇这些数据是怎么获取.今天Mo就来教大家如何使用Python来进行历史天气数据 ...

  8. [Python]网站数据爬取任务

    Python爬虫作业:网站数据爬取任务 从以下网址(包括但不限于下列网络或应用)中爬取数据,以核实的形式存储数据,并进行分析(不一定是计算机角度的分析,可写分析报告),或制作词云图. 一.文本数据 酷 ...

  9. 基于python的数据爬取与分析_基于Python的网站数据爬取与分析的技术实现策略

    欧阳元东 摘要:Python为网页数据爬取和数据分析提供了很多工具包.基于Python的BeautifulSoup可以快速高效地爬取网站数据,Pandas工具能方便灵活地清洗分析数据,调用Python ...

  10. day16-简单网页数据爬取

    day16-简单网页数据爬取 1.练习 """ 将100以内的素数输出到一个文件中""" def is_prime(num:int)-> ...

最新文章

  1. Docker 入门系列(4)- Docker 数据管理(挂载目录、挂载文件、数据卷挂载、数据卷共享、数据卷删除、数据卷容器备份和恢复)
  2. 七段数码管段码表共阳_常用数字电路之显示篇数码管
  3. SpringBootStarter种类
  4. cmd中添加中文字体
  5. 【公告】【公告】【公告】【公告】
  6. Realtek24口RTL8382L+RTL8218B+RTL8231方案简介
  7. java 中的servlet_java中的Servlet
  8. java 开发详解_面向接口编程详解-Java篇
  9. flutter不支持热更新_Flutter 在安卓上可以实现热更新了
  10. minist _On_[GoogleNet]
  11. CS48 D BIT
  12. mysql 队列表设计_mysql主从同步操作,及队列设计
  13. BootStrap Table和Mybatis Plus实现服务端分页
  14. Python自动发送邮件提示:smtplib.SMTPServerDisconnected: please run connect() first
  15. C语言图书管理系统设计报告
  16. PowerDesigner如何生产数据字典
  17. 嵌入式驱动工程师开发学习路线
  18. 《大连金州没有眼泪》
  19. Android开机速度优化
  20. java chr()_chr码值对应列表大全

热门文章

  1. 个人永久性免费-Excel催化剂功能第44波-可见区域复制粘贴不覆盖隐藏内容
  2. 在chrome上安装印象笔记插件
  3. MyBatis官方文档-简介
  4. Android音视频——Libyuv使用实战
  5. 511遇见易语言教程API模块制作cmd复制文件
  6. [2020-07]如何获取百度访客搜索关键字(竞价、推广、SEO)
  7. 【点宽专栏】Dual Thrust 交易策略
  8. dsp2812软件周期耗时测试,基于DSP2812设计的简易数字频率计
  9. Python利用google翻译,翻译字幕文件!我想翻译日语!
  10. Microsoft Excel 教程,如何在 Excel 中使用自动求和?