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

已能爬取第一个<b>标签,如何用BeautifulSoup获取单个div中第二个?

解决BeautifulSoup获取div下前两个标签的问题

嘿,我来帮你搞定这个爬取问题!你现在只能拿到第一个标签,大概率是因为用了find()方法——它只会返回第一个匹配的元素,要获取多个的话得用find_all()才行。

先给你补全并修正后的代码,你可以参考调整:

from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup

day = "09"
month = "10"
year = "2017"
my_url = 'https://www.sportsbookreview.com/betting-odds/mlb-baseball/?date=' + year + month + day

# 完成页面请求与解析流程
uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()
page_soup = soup(page_html, "html.parser")

# 这里需要你根据实际页面结构替换div的定位条件(比如class、id)
# 比如如果目标div有class="odds-container",就改成对应的属性
target_div = page_soup.find("div", {"class": "your-target-div-class"})

# 获取该div下所有<b>标签,返回的是列表
b_tags_list = target_div.find_all("b")

# 提取前两个标签的内容
if len(b_tags_list) >= 2:
    first_b_value = b_tags_list[0].text.strip()
    second_b_value = b_tags_list[1].text.strip()
    print(f"第一个值:{first_b_value},第二个值:{second_b_value}")
else:
    print("目标div下的<b>标签数量不足2个,请检查定位是否正确")

关键说明:

  • 替换定位条件:你需要先在浏览器里查看目标div的具体属性(比如class或id),把代码里的your-target-div-class换成实际值,确保精准定位到你要的那个div。
  • 用find_all()替代find():find_all("b")会返回该div下所有标签的列表,之后你可以通过索引[0]和[1]直接获取前两个元素的内容。
  • 清理文本:.text.strip()能帮你去掉文本前后的空格、换行符,拿到干净的-130和+110这类数值。

如果还是拿不到第二个标签,大概率是div的定位不对,你可以先打印target_div看看是不是正确的那个元素,再排查问题~

内容的提问来源于stack exchange,提问作者Kyle Lagerquist

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:10:56