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

如何用BeautifulSoup将抓取的单字符串企业信息转为字典?

网页企业信息提取:将连续字符串转为结构化字典

问题背景

使用BeautifulSoup抓取网页企业信息时,通过field = soup.select('span:-soup-contains("Nombre y dirección del contratista") + div')获取到目标div元素,但调用field[0].text得到的是无分隔的连续字符串,无法拆分各字段。

相关HTML结构

<div>
  <span class="timark">Nombre y dirección del contratista</span>
  <div class="txtmark">
    "Nombre oficial: VIVAVIS AG"
    <br>
    "Número de identificación fiscal: HRB 737454"
    <br>
    "Dirección postal: Nobelstrasse 18, D-76275, Ettlingen, Germany"
    <br>
    "Localidad: Ettlingen"
    <br>
    "Código NUTS: "
    <span class ="nutsCode">DE Deutschland</span>
    <br>
    "Código postal: D-76275"
    <br>
    "País: Alemania"
    <br>
    "Dirección de internet: "
    <a class="ojshref" href="https://www.vivavis.com/" target="_blank">https://www.vivavis.com/</a>
  </div>
</div>

当前输出情况

field的输出:

[<div class="txtmark" style="color:black">Nombre oficial: VIVAVIS AG<br/>Número de identificación fiscal: HRB 737454<br/>Dirección postal: Nobelstrasse 18, D-76275, Ettlingen, Germany<br/>Localidad: Ettlingen<br/>Código NUTS: <span class="nutsCode">DE Deutschland</span><br/>Código postal: D-76275<br/>País: Alemania<br/>Dirección de internet: <a class="ojshref" href="https://www.vivavis.com/" target="_blank">https://www.vivavis.com/</a></div>]

field[0].text的输出:

Nombre oficial: VIVAVIS AGNúmero de identificación fiscal: HRB 737454Dirección postal: Nobelstrasse 18, D-76275, Ettlingen, GermanyLocalidad: EttlingenCódigo NUTS: DE DeutschlandCódigo postal: D-76275País: AlemaniaDirección de internet: https://www.vivavis.com/

目标格式

需要转换为如下结构化字典:

{
'Nombre oficial': 'VIVAVIS AG',
'Número de identificación fiscal': 'HRB 737454',
'Dirección postal': 'Nobelstrasse 18, D-76275, Ettlingen, Germany',
'Localidad': 'Ettlingen',
'Código NUTS': 'DE Deutschland',
'Código postal': 'D-76275',
'País': 'Alemania',
'Dirección de internet': 'https://www.vivavis.com/'
}

解决方案

方法一:直接遍历目标div的子节点处理

这种方法直接操作HTML节点,能精准处理包含子元素(如<span>、<a>)的字段:

from bs4 import BeautifulSoup

# 假设已获取到soup对象和field变量
target_div = field[0]
company_info = {}

for item in target_div.contents:
    # 跳过空文本节点和<br>标签
    if item.name == 'br' or str(item).strip() == '':
        continue
    
    # 处理纯文本节点(带引号的字段)
    if item.name is None:
        clean_text = item.strip().strip('"')
        if ': ' in clean_text:
            key, value = clean_text.split(': ', 1)
            company_info[key] = value
    else:
        # 处理包含子元素的字段(如Código NUTS、Dirección de internet)
        # 获取字段名部分的文本
        label_text = item.previous_sibling.strip().strip('"')
        if ': ' in label_text:
            key, _ = label_text.split(': ', 1)
            # 获取子元素的文本内容
            value = item.get_text(strip=True)
            company_info[key] = value

print(company_info)

方法二:替换<br>为换行符后拆分文本

这种方法通过将<br>替换为换行符,把连续文本拆分为多行,再逐行处理,代码更简洁:

# 假设已获取到target_div
# 将所有<br>标签替换为换行符
for br in target_div.find_all('br'):
    br.replace_with('\n')

# 获取带换行分隔的文本,同时清理多余空格和引号
text_content = target_div.get_text(strip=True, separator='\n')
lines = [line.strip('"') for line in text_content.split('\n') if line.strip()]

company_info = {}
for line in lines:
    if ': ' in line:
        key, value = line.split(': ', 1)
        company_info[key] = value

print(company_info)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 21:10:28