You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将天气数据爬取代码改造为支持重复输入的循环程序?

实现持续查询天气的循环功能

直接用while True创建无限循环,配合用户输入判断退出逻辑,同时加入异常处理避免程序崩溃,完整代码如下:

from requests_html import HTMLSession

# 初始化会话,放在循环外避免重复创建
s = HTMLSession()

while True:
    # 获取用户输入的城市名称
    query = input("请输入要查询的城市名称(输入'quit'退出):").strip()
    
    # 判断是否退出循环
    if query.lower() == 'quit':
        print("程序已退出")
        break
    
    # 跳过空输入
    if not query:
        print("请输入有效城市名称")
        continue
    
    # 构造请求URL
    url = f'https://www.google.com/search?q=weather+{query}'
    headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'}
    
    try:
        r = s.get(url, headers=headers)
        # 提取天气数据
        temp = r.html.find('span#wob_tm', first=True).text
        unit = r.html.find('div.vk_bk.wob-unit span.wob_t', first=True).text
        desc = r.html.find('div.VQF4g', first=True).find('span#wob_dc', first=True).text
        
        print(f"{query}的天气:温度{temp}{unit},{desc}")
    except AttributeError:
        print(f"无法获取{query}的天气信息,请检查城市名称是否正确")
    except Exception as e:
        print(f"查询出错:{str(e)}")

关键说明:

  • 无限循环控制:用while True启动循环,当用户输入quit(不区分大小写)时,执行break退出循环
  • 空输入处理:判断输入为空时提示用户重新输入,避免无效请求
  • 异常处理:
    • AttributeError捕获页面元素找不到的情况(比如城市名称错误、谷歌页面结构变动)
    • 通用Exception捕获其他未知错误,防止程序直接崩溃
  • 会话复用:HTMLSession()初始化放在循环外,避免每次查询都创建新的HTTP会话,提升请求效率

内容的提问来源于stack exchange,提问作者Terrence

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 09:20:24