自动高效制作短期预报与气候公报软件1.0版本
1.需求
最近在工作中遇到了一个发预报的业务。这是一项简单的工作,但是因为每天要发送两次,每次要复制粘贴,再转格式,归档时还要创建对应日期的文件夹,这无形中浪费了很多时间,并且有时候会不经意间搞错时间,日期什么。忙起来,还会忘记发预报。
基于此,我们思考,如何通过改善生产工具,来提高我们的生产力。第一个想到的办法就是通过编程来解决这个问题。那使用什么语言好一些呢?其实这个倒是无所谓,主流的java和python都可以实现。本文以python语言为例,对整个项目进行介绍,抛砖引玉,希望大家不吝指教。
文末会给出气候公报的部分源码,仅供参考。
2.思路与解决方案
2.1气候公报
2.1.1 思路
首先我们对要生成目标文件有一个简单的了解。即,中国局每天会生成一个天气公报,我们需要把这个公报内容,生成一个pdf文件,并保存为相应的pdf文件。思路很清晰。
- 爬取网页相关内容
- 生成一个word对象,将爬取到的内用进行格式整理,并写入到word内
- 将word转换为pdf文件,并保存。
- 通过邮件/微信消息通知发报人,今天要发报了。
有了思路,我们就要开始写代码了。
2.1.2 代码
首先是对网站的前端页面html结构进行分析,按着F12,进入开发者模式,我们很容易看到,我们需要的内容被一个“xml”的标签所包裹。那么我们就直接爬取这部分内容就可以了。引入requests库和BeautifulSoup。
import requests
from bs4 import BeautifulSoup
ret = requests.get('https://weather.cma.cn/web/channel-3780.html')
ret.encoding = "utf-8"
bs = BeautifulSoup(ret.text, "html.parser")
# 通过对源码观察,我们需要的内容集中在class = xml 的标签内
h = bs.find('div', class_='xml')
再然后,我们还要 对xml里面的a标签,p标签,进行整理。
最终我们把需要的内容放在了一个bs对象里面。
然后我们引入一个处理word的库
from docx import Document
document = Document()
将bs对象的内容存入到document对象里面。
之后我们保存该对象,即可生成相对应的word文件。
紧接着,我们引入一个将word转换为pdf的库。
from docx2pdf import convert
这个库十分好用,并且用法也十分简单。
到此,我们的制作转化工具就完成了。接下来就可以将文件发送给我们的用户了。
2.2短期预报
2.2.1思路
其实短期预报的制作思路与公报的思路基本一致。稍有不同的是,短期预报的制作源头是从内网上进行下载制作的。他的源文件不是一个网页,而是每天上午5点和下午五点更新的一个word文档。这个文档可以在相对的网站进行下载。
- 打开相应网站
- 爬虫获取当天上午/下午的短期预报url(这里有个坑),并下载
- 读取该word内容,并删除相应内容,生成我们需要的格式。
2.2.2代码
这个代码与公报的代码类似。就不赘述了。
3.使用说明
虽然我们写好了代码,但只能我们自己用那确实有点不得劲。那么我们就要把它打包成相应的exe可执行文件。让大伙都能用。
这是我们还需要引入一个包
pip install pyinstaller
使用这个包,我们可以很轻松的将python文件打包程可执行文件。这样,即使在没有python环境的电脑上,对方也可以使用我们的工具。
注:关于该包打包优化,以及制作相应可执行程序的内容在这里不再赘述,以后有空会出相关文章进行详解。下次一定。
经过上述操作,最终,我们会生成两个可执行文件
我们只需是双击打开,就可以运行该软件,并生成相应的预报文件。以公报为例,双击后,会弹出dos界面,会引导一步步创建相应的文件:
运行结束后会在该软件所在目录中按照日期和名字生成相关文件夹与文件
是不是很方便呢。
4.扩展功能
读者可能会说了,可是这只解决了,文件的爬取与制作功能。我比较懒,还想在懒一点,每天到点让他自己执行可以吗。哈哈哈哈,答案是当然可以了。
有很多种办法可以完成这个操作,我觉得比较方便的一个是借助windows的定时计划功能。
5.vip功能
周末发预报,你起得来吗?那能不能???????
6.最后
希望看官老爷们,点点网站的广告,谢谢。
版权属于: 依依东望