【问题标题】:Add ID tags to HTML tags using Python (BeautifulSoup?)使用 Python 将 ID 标签添加到 HTML 标签(BeautifulSoup?)
【发布时间】:2018-08-02 18:34:46
【问题描述】:

我有一个包含某些标签的 HTML 文件,我需要为每个标签添加 ID 号,格式为 id="rule_1"id="rule_1.1"id="rule_1.2"id="rule_1.2.1" 等。例如,当前的 HTML 是:

<div style="styles">
    <p class="classname">TEXT</p>
    <p class="classname">TEXT</p>
    <ul style="styles">
        <li>
            <p class="classname">TEXT</p>
        </li>
        <li>
            <p class="classname">TEXT</p>
        </li>
    </ul>
</div>

我需要 HTML 看起来像这样:

<div style="styles" id="rule_1">
    <p class="classname" id="rule_1.1">TEXT</p>
    <p class="classname" id="rule_1.2">TEXT</p>
    <ul style="styles" id="rule_1.3">
        <li id="rule_1.3.1">
            <p class="classname" id="rule_1.3.1.1">TEXT</p>
        </li>
        <li id="rule_1.3.2">
            <p class="classname" id="rule_1.3.2.1">TEXT</p>
        </li>
    </ul>
</div>

我可以手动编写这些,但我希望使用现有的 HTML 解析器库。是否可以使用 BeautifulSoup 或其他模块?

我尝试过这样的事情:

from bs4 import BeautifulSoup as html_parser

with open('outputs/HTML/{}.html'.format(deal), 'r') as read_file:
    html_source = read_file.read()

soup = html_parser(html_source, 'html.parser')
html_tags = soup.find_all(['div', 'p', 'span', 'ul', 'li'])

for each_tag in html_tags:
    each_tag.attrs['id'] = html_tags.index(each_tag)

with open('outputs/HTML/{}-id.html'.format(deal), 'w') as save_file:
    save_file.write(str(soup))

但这只是添加了id="1"id="2",等等。我怎样才能让它像11.11.1.1 等交错排列?

【问题讨论】:

    标签: python html beautifulsoup


    【解决方案1】:

    没关系,想通了:

    curr_tags = {}
    
    for each_tag in html_tags:
        if html_tags.index(each_tag) == 0:
            each_tag.attrs['id'] = 'rule_1'
        else:
            parent_id = each_tag.parent.attrs['id']
            if parent_id in curr_tags.keys():
                curr_tags[parent_id] += 1
            else:
                curr_tags[parent_id] = 1
            each_tag.attrs['id'] = parent_id + '.{0}'.format(curr_tags[parent_id])
    

    【讨论】:

      猜你喜欢
      • 2018-08-27
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      • 2013-03-10
      • 2016-03-09
      • 1970-01-01
      • 2018-10-04
      相关资源
      最近更新 更多