如何将天气数据爬取代码改造为支持重复输入的循环程序?
实现持续查询天气的循环功能
直接用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
相关产品推荐
相关产品推荐

