Python BeautifulSoup解析Windguru时span标签无数据问题咨询
问题根因
定位到空标签属于预期内的现象:Windguru站点的实时风速数据并非直接写入初始返回的HTML源码,是浏览器加载完初始页面后,通过JavaScript发起异步请求获取数据,再填充到class为wgs_wind_avg_value的span标签内。requests库仅能获取初始静态HTML源码,无法执行页面内嵌的JS逻辑,因此抓到的span标签本身就是无内容的空壳。另外贴出的原始代码存在语法错误:try块下的所有代码未做缩进,Python依靠缩进划分代码块,直接运行会触发缩进报错。
可行解决方法
- 方法1:直接请求站点的数据接口(推荐,效率最高、稳定性最好)
打开浏览器访问目标站点,按F12调出开发者工具,切换到「网络」面板,筛选Fetch/XHR类型请求,刷新页面后就能找到站点拉取实时数据的后端接口,接口直接返回结构化的JSON数据,不需要额外解析HTML。
参考实现代码:
import requests # 接口地址和参数可从开发者工具抓到的实际请求中复制 api_url = "https://www.windguru.cz/int/iapi.php" req_params = { "q": "station_data", "id_station": 3303 } req_headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36', 'Referer': 'https://www.windguru.cz/station/3303' } resp = requests.get(api_url, params=req_params, headers=req_headers) resp.raise_for_status() station_data = resp.json() # 从返回的JSON结构中找到对应平均风速的字段取值即可 avg_wind_speed = station_data.get("wind_avg") print(avg_wind_speed)
- 方法2:使用可执行JavaScript的爬虫框架
如果不想逆向分析接口,可以用playwright、selenium这类工具模拟真实浏览器访问页面,等页面JS执行完成、数据填充到标签后再读取DOM内容,就能拿到span里的风速值。这种方式资源占用远高于直接调用接口,仅适合不想分析接口的场景使用。
注意:爬取站点数据请遵守目标站点的robots协议和相关使用规定,控制请求频率,不要对站点正常运行造成影响。
内容的提问来源于stack exchange,提问作者ganger
相关产品推荐
相关产品推荐

