如何用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
相关产品推荐
相关产品推荐

