使用BeautifulSoup提取嵌套span中降水概率数据遇阻求助
解决BeautifulSoup提取嵌套span降水概率的问题
先排查选择器是否匹配正确
你输出--大概率是选择器没定位到目标文本,先核对页面的HTML结构。比如降水概率的嵌套结构可能是这样:
<div class="weather-item"> <span class="label">降水概率</span> <span class="value"> <span>3%</span> </span> </div>
如果之前用了soup.find('span', class_='value').text,可能因为外层span没有直接文本,拿到的是空值,最终显示--。改成以下方式即可:
- 用CSS选择器定位最内层span:
precip_prob = soup.select_one('.value span').text.strip() - 或者通过find嵌套定位:
outer_span = soup.find('span', class_='value') precip_prob = outer_span.find('span').text.strip() if outer_span else '无数据'
确认是否是动态渲染内容
如果静态HTML里根本找不到降水概率的文本,说明数据是JS动态加载的。这时候不用急着上Selenium,优先抓接口:
- 打开浏览器开发者工具(F12),切换到「Network」标签,刷新页面。
- 筛选「XHR」类型的请求,找到返回天气数据的API接口(通常是带
weather、data等关键词的URL)。 - 用
requests直接请求这个接口,从JSON响应里提取降水概率,比解析HTML高效得多:import requests response = requests.get("https://xxx.weather-api.com/real-time") weather_data = response.json() precip_prob = weather_data['current']['precip_probability'] + '%'
兜底处理空值
不管哪种方式,都可以加个判断避免输出无效符号:
print(precip_prob if precip_prob else '暂无数据')
内容的提问来源于stack exchange,提问作者Cats
相关产品推荐
相关产品推荐

