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

如何使用BeautifulSoup从公共标签下提取子元素获取同义词?

解决方案

修正后的代码

from bs4 import BeautifulSoup
import requests

def fetch_synonyms(target_word):
    # 构造请求URL,处理带空格的单词
    url = f"https://www.thesaurus.com/browse/{target_word.replace(' ', '%20')}"
    # 添加请求头避免反爬拦截
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
    }
    
    response = requests.get(url, headers=headers)
    soup = BeautifulSoup(response.text, "html.parser")
    
    # 定位同义词专属区域(通过aria-labelledby属性过滤,比class/id更稳定)
    synonym_block = soup.find("section", {"aria-labelledby": lambda attr: attr and "synonyms" in attr.lower()})
    if not synonym_block:
        return []
    
    # 提取所有同义词文本,保留带空格的完整短语
    synonym_list = [link.get_text(strip=True) for link in synonym_block.select('div[data-testid="word-grid-container"] a')]
    return synonym_list

# 示例调用
print(fetch_synonyms("good"))

关键说明

  1. 稳定定位同义词区域:使用aria-labelledby属性过滤出同义词section,这个属性的命名逻辑很少变动,比随单词变化的class/id更可靠,能直接排除反义词区域。
  2. 正确提取文本:直接遍历目标容器内的所有<a>标签,用get_text(strip=True)提取每个链接的完整文本,自动处理带空格的同义词(比如“fine and dandy”会作为单个列表元素保留)。
  3. 反爬处理:添加User-Agent请求头,避免被网站的反爬机制拦截。

原代码问题分析

  • 原代码中ele.findChildren('ul', recursive=False)返回的是<ul>元素的列表,直接调用.text会报错(列表没有该属性)。
  • 没有深入到<a>标签层级提取文本,导致无法获取单个同义词的完整内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 15:03:26