【工作记录】基于可视化爬虫spiderflow实战天气数据爬取@20230618

这篇具有很好参考价值的文章主要介绍了【工作记录】基于可视化爬虫spiderflow实战天气数据爬取@20230618。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

之前写过一篇关于可视化爬虫spiderflow的文章,介绍了基本语法并实战了某校园新闻数据的爬取。

还有一篇文章介绍了基于docker-compose快速部署spiderflow的过程,需要部署的话可参考该文章。

文章链接如下:

  • 可视化爬虫框架spiderflow入门及实战
  • 【工作记录】基于docker-compose快速部署springboot应用的实践

本文继续记录一下天气数据爬取的过程,供实现参考。

原始需求

近期接到运营中心一个业务需求,希望能获取到指定区域的天气数据,用于大屏展示,需要的参数包含:

  1. 该区域实时天气, 如气温、风向、AQI指数等
  2. 该区域3天及7天预报
  3. 该区域过去最近24小时气温、降水、相对湿度、空气质量等数据
  4. 该区域将来24小时预报,以3小时为间隔
  5. 气象台发布的该区域的预警信息

需求拆解

分析原始需求可分为三部分数据:

  1. 区域管理
  2. 天气数据
  3. 预警信息

具体说明如下:

  1. 区域管理中根据指定字段(比如enabled字段为1)来确定爬取数据的范围。
  2. 天气数据用于页面展示,包含需求里天气相关的数据
  3. 预警数据用于页面展示预警信息,需要预警来源、预警日期、预警内容、预警标题、图标

数据来源网站

1、关于天气数据的获取我们取中央气象台的数据,网址为: 西安-天气预报 (nmc.cn)

​ 上面网址是在页面上搜索框输入了西安后查询的数据页面,页面展示内容如下:
【工作记录】基于可视化爬虫spiderflow实战天气数据爬取@20230618
【工作记录】基于可视化爬虫spiderflow实战天气数据爬取@20230618

可以看到官方这个页面上包含了我们需求提到的天气相关的所有数据。

2、预警数据我们使用的网页为: 中央气象台官方网站-预警信号 (nmc.cn)

列表里可以选择省份以获取指定省份的预警数据,这里我们以陕西省为例,页面展示如下:

【工作记录】基于可视化爬虫spiderflow实战天气数据爬取@20230618

【工作记录】基于可视化爬虫spiderflow实战天气数据爬取@20230618

详情页我们需要获取到预警内容用于展示。

开始设计

前期准备

  • 部署好spiderflow爬虫,可正常访问

​ 部署过程可参考【工作记录】基于docker-compose快速部署springboot应用的实践

  • 准备一个数据库用于存放对应数据

    要求能通过spiderflow服务器访问到该数据库即可

  • 通过spiderflow的页面,添加上面准备好的数据源,用于后续爬虫中的数据保存

页面数据来源分析

进入西安天气预报页面,网址为西安-天气预报 (nmc.cn)

打开开发者工具,找到网络-Fetch/XHR,可以看到如下界面:

【工作记录】基于可视化爬虫spiderflow实战天气数据爬取@20230618

可以看到区域数据是通过接口请求到的,在标头和负载可以看到具体的请求地址可参数。

在区域数据下面还有另外一个接口数据,如下:

【工作记录】基于可视化爬虫spiderflow实战天气数据爬取@20230618

具体结构如下:

【工作记录】基于可视化爬虫spiderflow实战天气数据爬取@20230618

【工作记录】基于可视化爬虫spiderflow实战天气数据爬取@20230618

【工作记录】基于可视化爬虫spiderflow实战天气数据爬取@20230618

至此天气相关数据就基本涵盖全了,只需要获取到相关数据并保存入库即可。

继续打开预警列表页面,选择陕西省,打开开发者工具,找到网络-Fetch/XHR

【工作记录】基于可视化爬虫spiderflow实战天气数据爬取@20230618

【工作记录】基于可视化爬虫spiderflow实战天气数据爬取@20230618

这样就找到了预警列表和预警内容的数据,同样需要获取到然后入库保存即可。

设计爬虫-区域数据获取与保存

  1. 打开爬虫web界面,进入爬虫列表,点击添加爬虫,命名为天气区域数据获取

  2. 拖入需要的组件并连接起来,分别是爬虫组件、循环组件和SQL组件,配置如下:

【工作记录】基于可视化爬虫spiderflow实战天气数据爬取@20230618

说明如下:

  • 配置的地址即上面提到的获取区域数据的地址,爬虫完成后会得到一个resp的变量,也就是返回的json数据,我们可以通过${resp.json}获取到变量的数据。

  • 循环组件配置循环或集合参数为${rs.json}, 添加循环后可以得到item和index两个变量分别对应循环中的每一项和循环中的索引。

  • 执行SQL组件需要配置链接的数据源及需要执行的SQL脚本,脚本中可使用流程中的变量,这里我们用到的就是item

执行SQL组件配置如下图:

【工作记录】基于可视化爬虫spiderflow实战天气数据爬取@20230618

说明如下:

  • 脚本很简单跟正常的sql差不多,只不过里面的变量是通过#${XXx}#来写的。

  • 这里示例的是mysql数据库,其他数据库如有必要根据语法做相应修改即可。

  • 表结构也比较简单,就截图中的字段加上一个ID自增主键和create_time创建时间,建表语句就不在这里贴了。

  1. 设计完成后点击工具栏的保存,可以点击工具栏旁边的侧三角按钮运行,然后观察数据库的数据即可,正常情况下不报错数据就可以正常入库了。

【工作记录】基于可视化爬虫spiderflow实战天气数据爬取@20230618

至此区域数据爬取并保存完成。

设计爬虫-天气数据获取与保存

前面我们提到区域表中存在一个字段enabled,如果为1的话我们才爬取它的数据,所以在爬虫中应该是这样一个流程:

  • 先查询出enabled值为1的所有区域数据,
  • 循环获取天气数据
  • 保存入库

具体配置过程如下:

  1. 回到爬虫列表继续添加爬虫,命名为天气数据获取

  2. 拖入相关组件并配置
    【工作记录】基于可视化爬虫spiderflow实战天气数据爬取@20230618

​ 说明如下:

​ 1. 第一个执行SQL组件是为了筛选出所有enabled为1的区域数据,配置的sql也很简单,

select * from `mapdesign`.weather_zone where enabled = 1;

执行完成后会得到一个rs的变量,可以通过rs.json将数据转换成json结构方便后续使用, 通过${rs.json}来取值。

​ 2. 循环的集合配置的就是上面sql的结果: ${rs.json}

​ 循环流程后会得到item和index两个流程变量,分别对应每一条数据和集合中的索引。

​ 3. 爬虫组件配置如下:

【工作记录】基于可视化爬虫spiderflow实战天气数据爬取@20230618

主要配置的就是个URL,可以根据页面上的接口地址看出拼接规律,item.code就是区域数据中的code值。

爬虫完成后会得到一个resp的变量, 可以通过resp.json转换成json结构,通过${resp.json}来取值使用。

​ 4. 定义变量

​ 为方便sql中变量的使用,我们可以使用定义变量组件提前定义好一些变量及其取值规则。

​ 具体配置如下:

【工作记录】基于可视化爬虫spiderflow实战天气数据爬取@20230618

结合上面分析的天气数据的数据结构,相对来说比较好理解,不做赘述。

​ 5. 执行SQL

​ 前面已经定义好了变量,sql中便可以通过#${变量名}#来使用了。

​ 脚本配置如下:

insert into mapdesign.weather_data(`date`, city_code, `real`, `predict`, `last`, update_time, publish_time)
values(date(now()), #${item.code}#, #${real}#, #${predict}#, #${last}#, now(), #${pt}#)
on duplicate key update `real`=#${real}#, `predict`=#${predict}#, `last`=#${last}#, update_time=now(), publish_time=#${pt}#

​ weather_data表设计比较简单,所有数据都是以json结构存储的,除脚本中涉及到的字段外还有个ID自增主键。

​ 这里的数据保存设计就比较随意了,各位可以根据自己的喜好自行设计保存即可。

  1. 完成后点击工具栏的保存按钮,然后可以点击保存按钮右侧的侧三角来运行,观察数据库数据即可。

    正常情况不保错的话就可以正常入库了。

    结果数据如下:

    【工作记录】基于可视化爬虫spiderflow实战天气数据爬取@20230618

至此天气数据的获取与保存就完成了。

设计爬虫-预警数据获取与保存

预警数据涉及到列表数据和详情数据的获取,需要两个爬虫和一个循环,设计如下流程:

【工作记录】基于可视化爬虫spiderflow实战天气数据爬取@20230618

说明如下:

  1. 第一个爬虫获取的是列表,还是以陕西省为例,配置如下:

【工作记录】基于可视化爬虫spiderflow实战天气数据爬取@20230618

  1. 定义变量

    在预警列表页面随便点击一个预警进入详情,可以看到详情页面的地址拼接方式为 "http://www.nmc.cn/publish/alarm/"+ ${item.id}.html , 这里定义的变量就是为了取到所有的列表数据json

    变量名为datalist, 变量值为${resp.json.jsonpath("data").jsonpath("page").get("list")}

  2. 循环

    循环组件不过多解释,循环的即可就是上面定义好的datalist, 即${datalist}

  3. 爬虫

    这个爬虫就是为了获取详情页面数据的,url配置为: http://www.nmc.cn/publish/alarm/${item.id}.html

    需要注意的是这里获取到的是一个html页面,我们需要通过路径匹配来取到页面中我们需要的数据。

  4. 定义变量

    这里主要是为了取到详情页面中的预警内容数据。

    配置变量名为alarmContent,变量值为${resp.html.selector("#alarmtext>p").text()}

    这个表达式的含义就是说取html中的id为alarmtext下面的p标签的文本内容

  5. 执行SQL

    除了alarmContent之外其余的数据都可以通过列表取到,如id, publish_time, title, icon等,在sql中使用#${item.xxx}#即可取到。

    最终配置的sql脚本如下:

    insert into `mapdesign`.alarm_data(alarm_id, title, icon, url, publish_time, update_time, alarm_content)
    values(#${item.alertid}#, #${item.title}#, #${item.pic}#, #${item.url}#, #${item.issuetime}#, now(), #${alarmContent}#)
    on duplicate key update title = #${item.title}#, alarm_content=#${alarmContent}#
    

    库名、表名、字段名及语法均可根据实际情况进行修改。

设计完成后保存运行,没有报错的话数据就可以正常入库了。

最终获取到的预警数据如下:

【工作记录】基于可视化爬虫spiderflow实战天气数据爬取@20230618

至此预警数据获取与保存就完成了。

结语

本文记录了从分析到实践到测试完成天气数据爬取的过程,记录的比较细致。

作为一种实现思路,希望能对大家完成相关业务有所帮助。

对以上内容有任何疑问或者建议欢迎留言评论,看到后会及时回复~~~

创作不易,欢迎一键三连~~~文章来源地址https://www.toymoban.com/news/detail-502626.html

到了这里,关于【工作记录】基于可视化爬虫spiderflow实战天气数据爬取@20230618的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • django基于Python的房价预测系统+爬虫+大屏可视化分析

    欢迎大家点赞、收藏、关注、评论   房价是一个国家经济水平的重要体现,也是反映居民生活质量和水平的最直接的指标。目前我国住房制度以租售并举形式出现,房屋所有权人通过出售、出租房屋获得租金收入。但是由于房价波动较大,不能及时反映房价变化趋势,需要

    2024年02月08日
    浏览(43)
  • 基于python舆情分析可视化系统+情感分析+爬虫+机器学习(源码)✅

    大数据毕业设计:Python招聘数据采集分析可视化系统✅ 毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏) 毕业设计:2023-2024年最新最全计算机专业毕设选题推荐汇总 🍅 感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关

    2024年01月20日
    浏览(53)
  • 基于Python的网络爬虫爬取天气数据可视化分析

    目录 摘 要 1 一、 设计目的 2 二、 设计任务内容 3 三、 常用爬虫框架比较 3 四、网络爬虫程序总体设计 3 四、 网络爬虫程序详细设计 4 4.1设计环境和目标分析 4 4.2爬虫运行流程分析 5 爬虫基本流程 5 发起请求 5 获取响应内容 5 解析数据 5 保存数据 5 Request和Response 5 Request 5

    2024年02月08日
    浏览(52)
  • 基于Python的智能家居环境感知的设计与可视化-爬虫

    该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功以及课程答疑与微信售后交流群、送查重系统不限次数免费查重等福利! 软件开发环境及开发工具: 开发语言:python 使用框架:Django 前端技术:JavaScript、VUE.js(2.X)、css3 开发工具:

    2024年02月20日
    浏览(35)
  • 基于Python flask 的某招聘网站爬虫,招聘岗位可视化系统

    一、介绍 原文地址 今天为大家带来的是Python基于Flask的招聘信息爬取,招聘岗位分析、招聘可视化系统。 此系统是一个实时分析招聘信息的系统,应用Python爬虫、Flask框架、Echarts、VUE等技术实现。 本项目利用 Python 从某招聘网站抓取海量招聘数据,进行数据清洗和格式化后

    2024年02月07日
    浏览(57)
  • 计算机竞赛 基于大数据的社交平台数据爬虫舆情分析可视化系统

    🔥 优质竞赛项目系列,今天要分享的是 🚩 基于大数据的社交平台数据爬虫舆情分析可视化系统 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:4分 🧿 更多资料, 项目分享: h

    2024年02月11日
    浏览(52)
  • python爬虫分析基于python图书馆书目推荐数据分析与可视化

    收藏关注不迷路 随着电子技术的普及和快速发展,线上管理系统被广泛的使用,有很多商业机构都在实现电子信息化管理,图书推荐也不例外,由比较传统的人工管理转向了电子化、信息化、系统化的管理。 传统的图书推荐管理,一开始都是手工记录,然后将手工记录的文

    2024年02月08日
    浏览(50)
  • 互联网加竞赛 基于大数据的社交平台数据爬虫舆情分析可视化系统

    🔥 优质竞赛项目系列,今天要分享的是 🚩 基于大数据的社交平台数据爬虫舆情分析可视化系统 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:4分 🧿 更多资料, 项目分享: h

    2024年02月02日
    浏览(60)
  • 网络爬虫丨基于requests+mysql爬取猫眼热门电影数据做可视化分析

    本期内容 :基于requests+mysql爬取猫眼热门电影数据做可视化分析 实验需求 anaconda丨pycharm python3.11.4 requests mysql 项目下载地址:https://download.csdn.net/download/m0_68111267/88737727 学习网络爬虫相关技术,熟悉爬虫基本库requests的使用;学习数据库技术,熟悉mysql数据库的基本操作。本文

    2024年02月02日
    浏览(42)
  • 基于python requests库的bilibili爬虫简单尝试以及数据分析及可视化

    在初步了解了关于爬虫的课程之后,我也进行了一些自己的尝试。本文将从“爬取BiliBili Vtuber区直播信息为切入点,来探讨requests, re等库的基础应用。在爬取信息之后,本文将通过matplotlib以及pandas库做数据分析以及可视化 首先,我们先确认任务:打开Bilibili,在直播分区中选

    2024年02月05日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包