【问题标题】:Extract part of Text in HTML using Beautiful Soup使用 Beautiful Soup 提取 HTML 中的部分文本
【发布时间】:2017-06-30 16:28:40
【问题描述】:

我的 HTML 为:

<span id="lbldiv" class="lbl" style="color:Blue;">
    Division : First; Grand Total: 3861; Grand Max Total: 4600
</span>

我可以通过在 span 元素上使用 get_text 来提取文本:Division : First; Grand Total: 3861; Grand Max Total: 4600

是否可以仅从文本中提取数字 - 38614600,或者通过使用 Python 中的 Beautiful Soup 库跳过字母来获取字符(数字)?

【问题讨论】:

  • 您可以使用一些字符串处理选项(例如str.split())来执行此操作,但根据数据的复杂/一致程度,使用正则表达式可能会更好。
  • 使用text = soup.find("span", {"id":"lbldiv"}).text 获取文本。然后您可以使用splitisdigit 函数获取数字。

标签: python html beautifulsoup


【解决方案1】:

如果您的数据是常规数据,并且从外观上看,它是由分号分隔的键值对。下面的函数会将其提取到键值元组中。然后,您可以使用类似下面的方法遍历并仅提取有数字的行。

def extract_kv_pairs(s):
    """Extract key value pairs seperated by colons and semi-colons."""
    kvp = []
    for r in s.split(';'):
        k, v = r.split(':')
        # is it an integer?
        try:
            # yes, convert it
            v = int(v)
        except ValueError:
            # no, trim the string
            v = v.strip()

        kvp.append((k.strip(), v))

    return kvp

s = 'Division : First; Grand Total: 3861; Grand Max Total: 4600'
kvp = extract_kv_pairs(s)
numeric_values = [p for p in kvp if isinstance(p[1], int)]
print(kvp)
# [('Division', 'First'), ('Grand Total', 3861), ('Grand Max Total', 4600)]
print(numeric_values)
# [('Grand Total', 3861), ('Grand Max Total', 4600)]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多