python - 如何将具有不规则列的html代码转换为嵌套的json文件?

标签 python html regex python-3.x beautifulsoup

我有以下 HTML 代码。我想转换下面的 HTML 代码:

<div class="company_data__list">

 <div class="company_data__row"><div class="company_data__head">Name</div><div class="company_data__data">ABC Company<br/>Subtitle</div></div>
 <div class="company_data__row"><div class="company_data__head">Capital</div><div class="company_data__data">230000</div></div>
 <div class="company_data__row"><div class="company_data__head">Total</div><div class="company_data__data">103</div></div>

 <div class="company_data__row"><div class="company_data__head">Name</div><div class="company_data__data">XYZ Company<br/>Subtitle</div> 
 <div class="company_data__row"><div class="company_data__head">Total</div><div class="company_data__data">10</div></div>

 <div class="company_data__row"><div class="company_data__head">Name</div><div class="company_data__data">CAT Company<br/>Subtitle</div></div>
 <div class="company_data__row"><div class="company_data__head">Capital</div><div class="company_data__data">430000</div></div>
 <div class="company_data__row"><div class="company_data__head">Total</div><div class="company_data__data">10233</div></div>
 <div class="company_data__row"><div class="company_data__head">URL</div><div class="company_data__data">www.abc.com</div></div>

</div>



转换成如下所示的 Json 文件:

{ id: '1',
  data:{
    name: 'ABC CAT Company',
    capital: '230000',
    total:'103'
  },
  id:'2',
  data: {
    name: 'XYZ CAT Company',
    total:'10'
  },
  id:'3',
  data: {
    name: 'CAT Company',
    capital: '430000',
    total:'10',
    url:'www.abc.com'
  },


}

我正在使用 python3、bs4、re(正则表达式) 我在匹配 html 标题行和数据行时遇到了问题,因为它没有特定的#id 来区分。

最佳答案

下面的代码可以帮到你。

html_text = 'your_html_text'    
splits = re.split('\n\n', html_text)[1:]
output = []
for i, text in enumerate(splits):
    matches = [re.search(r'company_data__head">(\w+).*company_data__data">([\w\s\.]+)', m) for m in text.split('\n')]
    attrs = {}
    for match in matches:
        if match:
            key = match.group(1)
            value = match.group(2)
            attrs[key] = value
    if attrs:
        output.append({'id': i + 1, 'data': attrs})

输出

[{'id': 1, 'data': {'Name': 'ABC Company', 'Capital': '230000', 'Total': '103'}}, {'id': 2, 'data': {'Name': 'XYZ Company', 'Total': '10'}}, {'id': 3, 'data': {'Name': 'CAT Company', 'Capital': '430000', 'Total': '10233', 'URL': 'www.abc.com'}}]

关于python - 如何将具有不规则列的html代码转换为嵌套的json文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58601809/

相关文章:

python - 如何仅使用 TfidfVectorizer 获取 TF?

python - DBus 对象错误

javascript - <div> 双重扩展,html 和 <div> 构建问题

ruby - 正则表达式第一次不起作用

python - XBMC 12.0 (Frodo) 使用哪个版本的 Python?

python - 如何在具有多个目录的 html 中使用 css 样式?

html - 目的 : making div inline. 应显示为 Inline-Flex 或 Inline-block

regex - bash 从文本行中提取字符串

python - 为什么这个正则表达式在 python 中不起作用?它是有效的并且在 RegExr 上运行良好

python - Python多播接收器中的重复数据包