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

Selenium如何合并多container-ingredient_group节点的数据?

解决方案

方法1:合并所有食材为单一文本块

如果不需要保留原有的分组结构,只想把所有食材内容合并成一个整体,直接定位到所有食材节点提取后拼接即可:

for receptes_link in range(len(productlinks)):
    driver.get("https://receptes.tvnet.lv/recepte/23989-skabenu-darza-zalumu-zupa-ar-kupinatu-vistu-un-perlu-grubam")
    # 定位所有食材元素
    ingredients = driver.find_elements(By.XPATH, '//span[@class="ingredient__unit"]')
    # 拼接所有食材文本,每行一个食材
    all_ingredients = "\n".join([ing.text.strip() for ing in ingredients])
    sastavdala_final.append(all_ingredients)

方法2:结构化存储(保留分组关系)

如果需要保留原有的分组标题(比如"Pasniegšanai:""Buljonam:")和对应食材的关联,按分组提取并结构化存储会更实用,后续数据匹配也更方便:

sastavdala_final = []
for receptes_link in range(len(productlinks)):
    driver.get("https://receptes.tvnet.lv/recepte/23989-skabenu-darza-zalumu-zupa-ar-kupinatu-vistu-un-perlu-grubam")
    ingredient_groups = driver.find_elements(By.XPATH, '//div[@class="container-ingredient_group"]')
    group_data = {}
    for group in ingredient_groups:
        # 提取当前分组的标题
        title = group.find_element(By.XPATH, './/span[@class="ingredient_group__title"]').text.strip()
        # 提取该分组下的所有食材
        ingredients = group.find_elements(By.XPATH, './/span[@class="ingredient__unit"]')
        ingredient_list = [ing.text.strip() for ing in ingredients]
        group_data[title] = ingredient_list
    # 可选:将结构化数据格式化为易读的字符串存入列表
    formatted_content = ""
    for title, items in group_data.items():
        formatted_content += f"{title}\n"
        formatted_content += "\n".join([f"- {item}" for item in items]) + "\n\n"
    sastavdala_final.append(formatted_content.strip())
    # 也可以直接保留字典结构,方便后续程序处理:
    # sastavdala_final.append(group_data)

原代码问题说明

你原先的代码会把每个container-ingredient_group块的文本作为独立元素加入列表,导致分组间的数据相互独立,难以匹配。上面两种方法要么直接合并所有食材内容,要么保留分组关联结构,都能解决这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 04:55:53