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

