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

如何从bs4.element.ResultSet提取数值并整合到DataFrame?

解决方案

直接通过基于标签/类名的选择器提取数值,再批量存入列表后转成DataFrame,这种方式比依赖固定索引的contents更健壮,能适应HTML结构的微小变化。

步骤与代码示例

假设你的forecast是BeautifulSoup返回的ResultSet(即多个div元素的集合),按以下方式处理:

  1. 先导入依赖库:
import pandas as pd
from bs4 import BeautifulSoup
  1. 遍历每个div元素,提取数值并存入列表:
# 初始化空列表存储提取到的数值对
data_list = []

# 遍历forecast中的每个div项
for div in forecast:
    # 方法1:通过元素类名定位(推荐,最健壮)
    # 假设数值在class为"target-num"的两个标签内,需根据实际HTML调整类名
    num_elements = div.find_all(class_="target-num")
    if len(num_elements) >= 2:
        # 提取文本并转为数值类型(根据实际情况选int/float)
        num1 = float(num_elements[0].get_text(strip=True))
        num2 = float(num_elements[1].get_text(strip=True))
        data_list.append({"数值1": num1, "数值2": num2})
    
    # 方法2:提取所有非空白文本节点(适用于无明确类名的情况)
    # stripped_texts = [text.strip() for text in div.stripped_strings]
    # if len(stripped_texts) >= 2:
    #     num1 = float(stripped_texts[0])
    #     num2 = float(stripped_texts[1])
    #     data_list.append({"数值1": num1, "数值2": num2})

# 将列表转为DataFrame
result_df = pd.DataFrame(data_list)

关键说明

  • 不要用contents[index]:HTML中的换行、空格、嵌套小标签都会改变索引位置,导致提取失败;
  • 优先用类名/ID定位:如果数值所在元素有明确的class或ID,用find_all(class_="xxx")或find(id="xxx")是最可靠的;
  • 调试小技巧:如果不确定HTML结构,可打印单个div的格式化代码:print(div.prettify()),查看数值所在的具体标签。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:40:57