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

使用BeautifulSoup获取Ebay标题失败:next_sibling无法获取目标内容

解决eBay商品标题提取问题(去除"Details about")

看起来你踩了BeautifulSoup兄弟节点的小坑啦~你之前用bs.find('h1', {'id': 'itemTitle'}).next_sibling拿到的是<div id="vi-itt-filler"></div>,这是因为目标标题文本并不是h1标签的兄弟节点,而是h1标签的内部子内容。eBay的itemTitle结构通常是这样的:

<h1 id="itemTitle">
  <span>Details about </span>
  【你的商品标题】
</h1>

所以你要找的标题文本其实在h1标签内部,而不是它的下一个兄弟节点。这里给你几个靠谱的解决方案:

方案1:直接处理完整文本,剔除前缀

最简单的方式就是先拿到h1的全部文本,然后去掉开头的"Details about ":

# 先定位到h1标签
item_title_tag = bs.find('h1', {'id': 'itemTitle'})

# 提取文本并清理
if item_title_tag:
    full_title = item_title_tag.get_text(strip=True)
    clean_title = full_title.replace("Details about ", "").strip()
    print(clean_title)

方案2:定位内部span节点,取其后的文本

如果页面结构里"Details about"是被span包裹的,那可以直接找这个span的next_sibling:

item_title_tag = bs.find('h1', {'id': 'itemTitle'})
if item_title_tag:
    # 找到包裹"Details about"的span
    details_span = item_title_tag.find('span')
    if details_span:
        # 取span的下一个兄弟节点(就是商品标题文本)
        clean_title = details_span.next_sibling.strip()
        print(clean_title)

方案3:通过contents直接获取文本节点

h1标签的contents列表里会包含所有子节点,你可以直接取对应位置的文本节点:

item_title_tag = bs.find('h1', {'id': 'itemTitle'})
if item_title_tag and len(item_title_tag.contents) > 1:
    # 第二个元素就是标题文本(第一个是span或者空白节点)
    clean_title = item_title_tag.contents[1].strip()
    print(clean_title)

对比你原来的代码,问题就出在你找的是h1标签的兄弟节点,但目标内容其实在h1内部。用上面任意一种方法都能拿到不含"Details about"的商品标题啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:03:46