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

如何用BeautifulSoup(bs4)定位同属性span并抓取下午温度?

网页爬取:提取指定时段(下午)的温度值

我在做网页爬取时需要获取下午的温度,但页面里有4个结构完全一致的元素(相同class、span标签及data-testid属性),分别对应早、中、晚、夜四个时段的温度。目标HTML结构如下:

22°
27°
20°
15°

解决方案

由于这4个元素是按早、中、晚、夜的固定顺序排列的,你可以用以下两种方式提取下午的温度:

方法一:批量获取后按索引定位

先用find_all抓取所有符合条件的温度容器,再通过索引直接定位到第二个元素(对应下午,Python索引从0开始):

from bs4 import BeautifulSoup

# 假设已获取页面HTML并存入html变量
soup = BeautifulSoup(html, 'html.parser')

# 获取所有时段的温度div
temp_containers = soup.find_all('div', {'data-testid': 'SegmentHighTemp', 'class': 'Column--temp--5hqI_'})

# 提取下午温度(第二个元素,索引为1)
afternoon_temp = temp_containers[1].find('span', {'data-testid': 'TemperatureValue'}).text.strip()
print(afternoon_temp)

方法二:通过兄弟元素定位

如果能准确定位第一个时段(早上)的元素,也可以通过find_next_sibling找到它的下一个兄弟元素(即下午的温度容器):

from bs4 import BeautifulSoup

soup = BeautifulSoup(html, 'html.parser')

# 定位第一个温度div(对应早上)
morning_container = soup.find('div', {'data-testid': 'SegmentHighTemp', 'class': 'Column--temp--5hqI_'})

# 获取下一个同类型的兄弟元素(下午)
afternoon_container = morning_container.find_next_sibling('div', {'data-testid': 'SegmentHighTemp', 'class': 'Column--temp--5hqI_'})

# 提取温度文本
afternoon_temp = afternoon_container.find('span', {'data-testid': 'TemperatureValue'}).text.strip()
print(afternoon_temp)

⚠️ 注意:这两种方法都依赖元素的固定排序,如果后续页面调整了时段顺序,需要对应修改索引或定位逻辑。如果页面中有明确标注“下午”的文本标签,优先通过关联标签来定位,稳定性会更高。

内容的提问来源于stack exchange,提问作者john smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 14:54:24