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

使用Beautiful Soup抓取实时风速计网站数据返回None如何解决

问题原因

  1. requests 仅能获取服务器返回的初始静态HTML,你在浏览器审查元素中看到的id=js-2-text元素是页面加载完成后由JavaScript动态生成填充的,初始静态HTML中不存在该元素,因此BeautifulSoup无法匹配到对应内容。
  2. 站点的风速数据每秒更新,说明前端是定时请求后端数据接口拉取最新数值后再渲染到页面上,直接爬取原始HTML页面的思路本身不符合站点的数据加载逻辑。

解决方法

方案一:抓接口直接获取数据(优先推荐)

打开浏览器F12开发者工具,切换到「网络」标签,刷新页面后筛选「XHR/ Fetch」类型的请求,找到返回内容包含风速数据的接口,直接用requests请求该接口即可。这种方式无需解析HTML,能直接拿到结构化的JSON数据,请求效率远高于爬取页面。

方案二:使用无头浏览器模拟页面渲染

如果接口有加密、鉴权难以分析,可以用Selenium等工具模拟浏览器运行,等页面JS执行完成后再提取元素内容,示例代码如下:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
import time

# 配置Chrome无头模式
chrome_options = Options()
chrome_options.add_argument("--headless=new")
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--no-sandbox")

driver = webdriver.Chrome(options=chrome_options)
driver.get('http://88.97.23.70:81/')
# 等待页面JS渲染完成
time.sleep(2)

# 提取目标元素内容
wind_data = driver.find_element(By.ID, 'js-2-text').text
print(wind_data)

# 如需持续采集可添加循环
# while True:
#     print(driver.find_element(By.ID, 'js-2-text').text)
#     time.sleep(1)

driver.quit()

该方案无需分析接口,直接获取和浏览器一致的渲染后内容,缺点是资源占用更高,采集效率低于接口请求方案。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 13:39:03