用python爬取天气

之前做过这么个小网站,能够爬取天气,然后感觉没什么用,有上网站的时间用手机都看完了,然后就寻思能不能发到自己微信或者qq或者邮箱里

先写下怎么把数据提出来

import requests
import json
url =你自己的网址
result = requests.get(url)
#print(result.text)

data = json.loads(result.text)

for day_data in data["daily"]:
    fxDate = day_data["fxDate"]
    tempMax = day_data["tempMax"]
    tempMin = day_data["tempMin"]
    textDay = day_data["textDay"]
    windDirDay = day_data["windDirDay"]
    windScaleDay = day_data["windScaleDay"]
    windSpeedDay = day_data["windSpeedDay"]
    humidity = day_data["humidity"]
    precip = day_data["precip"]
    pressure = day_data["pressure"]
    vis = day_data["vis"]
    cloud = day_data["cloud"]

    # 这里就可以对数据进行处理,发送到微信或者邮箱等等
    print(f"日期: {fxDate}")
    print(f"最高温度: {tempMax} °C")
    print(f"最低温度: {tempMin} °C")
    print(f"天气: {textDay}")
    print(f"风向: {windDirDay}")
    print(f"风力等级: {windScaleDay}")
    print(f"风速: {windSpeedDay} km/h")
    print(f"湿度: {humidity}%")
    print(f"降水量: {precip} mm")
    print(f"大气压: {pressure} hPa")
    print(f"可见度: {vis} km")
    print(f"云量: {cloud}%")
    print("\n")

用之前需要申请天气网站的api,这里用的是和风天气的api,具体的url怎么写在官网的使用手册中会给

微信和qq等可能要注册两个号才能达到提醒的作用,邮箱看起来又有点麻烦,等我再瞅瞅

最后决定使用linux中的swaks来发送

 大致格式为swaks --to 自己的邮箱 --from 想用的源邮箱 --body 要发送的数据

这里使用格式化字符串来放入这几个数据,尤其是body,处理数据可以用这种方式:

 效果图如下:

 然后是怎么定时跑的问题,毕竟电脑不能整天开着,这里还是强烈推荐一下华为的这个云服务器,贼便宜,要是不干什么别的事可以买那个39块钱一年的,1核2g:https://activity.huaweicloud.com/discount_area_v5/index.html?fromacct=ba15c8d3-879a-4625-aa80-d0ca50a0b43b&utm_source=aGlkX2UwdjJxbm9lbnZ0YWI4ag===&utm_medium=cps&utm_campaign=201905

有了服务器之后就可以设置定时任务,这里用的是crontab

网上一堆说什么crontab -e的,也不知道有什么用,试了之后不好使而且很麻烦,这里用的方式是创建一个文件如weather.cron(这个后缀我也不知道是不是必须的),然后写上crontab格式的语句

crontab的格式如下:

分 时 日 月 周 命令

比如想要每天早上7点50发送邮件到我们的邮箱,就是50 7 * * * python3 /xxx/xxx.py,这里的python路径应该要用绝对路径,咱也不知道它的执行路径在哪,反正用绝对路径肯定没错

写好了之后输入crontab weather.cron,就能够成功添加定时任务,通过crontab -l来查看当前的定时任务

这里的文件是支持多行的,比如想早上7.50和晚上17.50发送,可以直接写两行

 附最终代码(需自行修改某些相关数据):

import requests
import json
import subprocess

url = 'https://devapi.qweather.com/v7/weather/3d?location=要查询的城市拼音或者经纬度坐标&key=自己的key&language=zh'
result = requests.get(url)

data = json.loads(result.text)

email_content = ""

for day_data in data["daily"]:
    fxDate = day_data["fxDate"]
    tempMax = day_data["tempMax"]
    tempMin = day_data["tempMin"]
    textDay = day_data["textDay"]
    windDirDay = day_data["windDirDay"]
    windScaleDay = day_data["windScaleDay"]
    windSpeedDay = day_data["windSpeedDay"]
    humidity = day_data["humidity"]
    precip = day_data["precip"]
    pressure = day_data["pressure"]
    vis = day_data["vis"]
    cloud = day_data["cloud"]

    email_content += f"日期: {fxDate}\n"
    email_content += f"最高温度: {tempMax} °C\n"
    email_content += f"最低温度: {tempMin} °C\n"
    email_content += f"天气: {textDay}\n"
    email_content += f"风向: {windDirDay}\n"
    email_content += f"风力等级: {windScaleDay}\n"
    email_content += f"风速: {windSpeedDay} km/h\n"
    email_content += f"湿度: {humidity}%\n"
    email_content += f"降水量: {precip} mm\n"
    email_content += f"大气压: {pressure} hPa\n"
    email_content += f"可见度: {vis} km\n"
    email_content += f"云量: {cloud}%\n"
    email_content += "\n"

# 使用swaks发送邮件
email_subject = "天气预报"
email_recipient = "自己的邮箱"
email_from = "weather@weather.com"

swaks_command = f"swaks --to {email_recipient} --from your_email@example.com --from '{email_from}' --body '{email_content}'"
subprocess.run(swaks_command, shell=True)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Python爬取天气信息,可以使用第三方库如requests和BeautifulSoup来获取和解析网页内容。首先,使用requests库发送HTTP请求获取网页的HTML代码。然后,使用BeautifulSoup库对HTML代码进行解析,提取所需的天气信息。 引用中提到了使用requests和BeautifulSoup来爬取网页数据的示例代码。在该示例中,使用了`requests.get()`方法获取网页内容,然后使用BeautifulSoup来解析HTML代码并提取所需的天气信息。 引用中提到了一个HtmlParser类,它使用BeautifulSoup来解析给定的HTML代码,并从中提取天气信息。在该示例中,使用了`find()`和`find_all()`方法来查找指定的HTML元素,并使用`.string`属性获取元素的文本内容。 引用中还提到了一个DataStorage类,它使用pandas库来存储天气数据。在该示例中,使用了`DataFrame()`方法创建一个数据框,并使用`.to_csv()`方法将数据保存到CSV文件中。 综上所述,要使用Python爬取天气信息,需要使用requests库发送HTTP请求获取网页内容,然后使用BeautifulSoup来解析HTML代码并提取所需的信息,最后使用pandas库将数据存储到文件中。根据引用和引用中的示例代码,你可以参考这些示例来实现你的爬取天气信息的代码。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Python爬取天气数据,并且进行天气预报(已实现)](https://blog.csdn.net/qq_50847752/article/details/127884116)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【Python】实现爬虫(完整版),爬取天气数据并进行可视化分析](https://blog.csdn.net/chandfy/article/details/125153243)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值