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

使用Selenium爬取Wunderground历史天气数据页面加载失败如何解决

问题根因排查
  • 固定等待逻辑不合理:你当前使用time.sleep(5)固定等待5秒的逻辑无法适配不同网络环境下的异步加载速度,wunderground的历史天气数据需要在基础页面加载完成后,额外通过JS请求后端接口拉取表格数据,网络波动时5秒不足以完成全量资源加载,就会出现空白、数据缺失的异常页面。
  • 反爬策略触发:虽然你已经添加了隐藏自动化特征的配置,但高频访问时站点仍会识别爬虫特征,返回拦截响应或者终止后续资源加载。
  • 浏览器配置缺失:缺少正常用户的浏览器特征参数,容易被站点识别为非真实用户访问。
可行解决方案

1. 替换固定等待为显式等待

使用Selenium的显式等待逻辑,直到页面核心的天气表格元素加载完成再执行后续操作,同时新增超时重试机制,代码示例:

import random
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 原有浏览器配置部分保持不变
driver = webdriver.Chrome(options=option)
driver.get(url)

# 替换原有的time.sleep(5)
max_retry = 3
for retry_count in range(max_retry):
    try:
        # 最长等待30秒,直到天气表格加载完成
        WebDriverWait(driver, 30).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, "table[aria-label='Daily Observations']"))
        )
        break
    except Exception as e:
        if retry_count == max_retry - 1:
            raise Exception(f"页面加载失败,已重试{max_retry}次") from e
        # 刷新页面重试
        driver.refresh()
        time.sleep(random.randint(2,5))

2. 补充浏览器反爬配置

在原有ChromeOptions配置中新增以下参数,模拟真实用户的浏览器特征:

# 模拟真实用户UA,可定期更换不同版本的浏览器UA
option.add_argument("--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36")
# 启动时最大化窗口,匹配真实用户操作习惯
option.add_argument("--start-maximized")
# 禁用沙箱模式,解决Linux环境下的加载异常问题
option.add_argument("--no-sandbox")
option.add_argument("--disable-dev-shm-usage")

3. 控制访问频率

每次请求完成后添加随机停留时间,避免高频访问触发反爬规则:

# 处理完单页数据后添加
time.sleep(random.randint(3,7))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:57:00