当前位置: 首页 > article >正文

Python爬虫项目 | 二、每日天气预报

文章目录

  • 1.文章概要
    • 1.1 实现方法
    • 1.2 实现代码
    • 1.3 最终效果
      • 1.3.1 编辑器内打印显示效果
      • 实际应用效果
  • 2.具体讲解
    • 2.1 使用的Python库
    • 2.2 代码说明
      • 2.2.1 获取天气预报信息
      • 2.2.2 获取当天日期信息,格式化输出
      • 2.2.3 调用函数,输出结果
    • 2.3 过程展示
  • 3 总结

1.文章概要

继续学习Python爬虫知识,实现简单的案例,发送每日天气预报

1.1 实现方法

本文使用Python中常用的requests、BeautifulSoup来实现的

1.2 实现代码

以下是本项目全部代码

# author by mofitte
# vx:mofitte 
# date 2024年11月20日
from datetime import datetime
import requests
from bs4 import BeautifulSoup

def get_weather():
    # 目标URL,这里我选择青海西宁
    url = 'https://www.weather.com.cn/weather1d/101150101.shtml'
    try:
        response = requests.get(url)
        response.encoding = 'utf-8'
        response.raise_for_status()

        # 解析HTML内容
        soup = BeautifulSoup(response.text, 'html.parser')

        # 提取天气预报信息,这里需要根据实际页面结构来定位元素
        # 假设天气预报信息在一个id为"7d"的div标签内
        forecast_div = soup.find('div', id='today')

        # 检查是否找到了forecast_div
        if forecast_div is not None:
            # 继续解析forecast_div中的内容,这里需要根据实际结构来编写
            # 假设每天的天气预报在一个class为"t clearfix"的div标签内
            daily_forecasts = forecast_div.find_all('div', class_='t')

            # 打印每天的天气预报信息
            for daily_forecast in daily_forecasts:
                data = get_today_date()  # 获取日期
                weather = daily_forecast.find('p', class_='wea').text  # 获取天气状况
                temperature = daily_forecast.find('p', class_='tem').text.strip()  # 获取温度
                print(f'今天是:{data}'+f',天气:{weather}'+f',温度:{temperature}')
        else:
            print("暂未获取到今日天气预报信息。")
    except Exception as e:
        print(f"解析网页时发生错误:{e}")

def get_today_date():
    return datetime.now().strftime("%Y-%m-%d")  # 返回当前日期

get_weather()

1.3 最终效果

1.3.1 编辑器内打印显示效果

在这里插入图片描述

实际应用效果

== 这里我是用力微信机器人,在指定的某个群内定时发布每日天气预报信息==
在这里插入图片描述

2.具体讲解

2.1 使用的Python库

1.datetime:时间库;
2.BeautifulSoup: 一个用于解析HTMLXML文档的Python库;
3.requests:一个Python第三方库,用于发送HTTP请求;

2.2 代码说明

2.2.1 获取天气预报信息

def get_weather():
    # 目标URL,这里我选择青海西宁,101150101是西宁的代码,这里可以替换为其他城市的信息,详见目标网站源码JS文件
    url = 'https://www.weather.com.cn/weather1d/101150101.shtml'
    try:
        response = requests.get(url)
        response.encoding = 'utf-8'
        response.raise_for_status()

        # 解析HTML内容
        soup = BeautifulSoup(response.text, 'html.parser')

        # 提取天气预报信息,这里需要根据实际页面结构来定位元素
        # 假设天气预报信息在一个id为"7d"的div标签内
        forecast_div = soup.find('div', id='today')

        # 检查是否找到了forecast_div
        if forecast_div is not None:
            # 继续解析forecast_div中的内容,这里需要根据实际结构来编写
            # 假设每天的天气预报在一个class为"t clearfix"的div标签内
            daily_forecasts = forecast_div.find_all('div', class_='t')

            # 打印每天的天气预报信息
            for daily_forecast in daily_forecasts:
                data = get_today_date()  # 获取日期
                weather = daily_forecast.find('p', class_='wea').text  # 获取天气状况
                temperature = daily_forecast.find('p', class_='tem').text.strip()  # 获取温度
                print(f'今天是:{data}'+f',天气:{weather}'+f',温度:{temperature}')
        else:
            print("暂未获取到今日天气预报信息。")
    except Exception as e:
        print(f"解析网页时发生错误:{e}")

2.2.2 获取当天日期信息,格式化输出

def get_today_date():
    return datetime.now().strftime("%Y-%m-%d")  # 返回当前日期

2.2.3 调用函数,输出结果

get_weather()   # 调用函数

2.3 过程展示

在这里插入图片描述

3 总结

本案例是采用了requests库来简单获取数据,过程还是相对简单的;遇到的难题还是在实际应用中,机器人调用遍历每日天气预报信息问题,最后还是结果了,哈哈哈,继续学习。

看到这里了,我只希望能点个赞,谢谢


http://www.kler.cn/a/403896.html

相关文章:

  • 天润融通携手挚达科技:AI技术重塑客户服务体验
  • PHP二维数组排序算法函数
  • 【蓝桥杯算法】Java的基础API
  • java 增强型for循环 详解
  • CAAS 和 IAAS
  • 靓车汽车销售网站(源码+数据库+报告)
  • git上传文件到远程仓库
  • 【东莞石碣】戴尔R740服务器维修raid硬盘问题
  • KubeSphere 最佳实战:K8s 构建高可用、高性能 Redis 集群实战指南
  • Jenkins的环境部署
  • Linux常用命令之wc命令详解
  • PointNet++项目分析
  • JAVA篇之类和对象
  • 使用 LSTM(长短期记忆网络) 模型对时间序列数据(航空旅客人数数据集)进行预测
  • vue2.0新建项目
  • 无人机侦察打击方案(3)
  • 亚马逊云服务器(AWS):功能、优势与使用指南
  • 【YOLOv8】安卓端部署-1-项目介绍
  • 【C++】数据上传的方式。持久化的方式。通过 JSON,序列化与反序列化。
  • Vue2 Class Component 使用指南:提升组件开发的可维护性
  • 嵌入式linux中QT信号与槽基本操作与实现
  • CSS一些练习过程
  • 深度学习:ResNet每一层的输出形状
  • vue3项目执行npm install下载依赖报错问题排查方法
  • [WPF] RichTextBox如何显示省略号?
  • 学习ASP.NET Core的身份认证(基于Cookie的身份认证1)