首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Python将ID标签添加到HTML标签(BeautifulSoup?)

使用Python将ID标签添加到HTML标签(BeautifulSoup?)
EN

Stack Overflow用户
提问于 2018-08-03 02:34:47
回答 1查看 635关注 0票数 0

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

代码语言:javascript
复制
<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看起来像这样:

代码语言:javascript
复制
<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或其他模块?

我尝试了这样的东西:

代码语言:javascript
复制
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等等那样交错呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-03 03:58:57

不要紧,我想通了:

代码语言:javascript
复制
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])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51660176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档